iPhone을위한 턴 기반 게임을 만들고 있는데, 턴 사이의 애니메이션이 포함되어 있습니다. 코드에서 [UIView animateWithDuration : ...] 메소드 호출을 인라인으로 기다리고 싶습니다. 이 호출을 비동기식 대신 동기식으로 수행 할 수있는 방법이 있습니까? 현재 내가하고있는 일은 ...iPhone : UIView 애니메이션이 완료 될 때까지 기다려주십시오.
// Some code...
NSConditionLock *conditionLock = [[NSConditionLock alloc] initWithCondition:0];
dispatch_sync(dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1
animations:^{
// some animation
}
completion:^(BOOL finished){
[conditionLock lock];
[conditionLock unlockWithCondition:1];
}];
});
// forces thread to wait until completion block is called
[conditionLock lockWhenCondition:1];
// More code...
따라서 위의 코드에서 "// More code ..."는 애니메이션이 완전히 끝난 후에 만 도달합니다. 분명히이 코드는 보조 스레드에서 실행해야하며 원하는대로 작동합니다. 그러나, 나는 gcd와 함께 NSConditionLock을 사용하는 것이 나쁜 형태이며이 방법으로 보조 스레드를 차단하는 것이 성능에 적합하지 않다는 느낌을 가지고 있습니다. 현재 코드가 괜찮습니까? 아니면 더 좋은 방법이 있습니까? 감사.
편집 : 요점은 "// 더 많은 코드 ..."가 인라인이며 완료 블록이 아니라는 것입니다. 정말 알고 싶습니다. GCD와 함께 NSConditionLock을 사용하는 것이 좋습니까? 더 좋은 방법이 아닌 경우 어떻게해야합니까?
보조 (메인이 아닌) 스레드에서 "일부 애니메이션"을 실행하는이 접근 방식에 문제가 있습니까? BTW, NCDonditionLock과 GCD를 결합하면 나쁜 형태라고 생각하는 이유는 무엇입니까? – Drux