2011-06-13 7 views
1

UIView 클래스 메서드를 사용하는 UIView 애니메이션이 끝날 때까지 프로그램을 "일시 중지"상태로 두는 것처럼 보입니다.UIView 애니메이션 지연

예를 들어 3 초간 지속되는 애니메이션 시작 방법과 애니메이션이 적용되는 동안 프로그램의 다른 부분이 계속 실행 중이고 터치 이벤트를 수락하는 등의 방법이 있습니까?

+0

(기본 UI 스레드 이외의) 다른 스레드에서 실행 될 수있는 그 다른 측면이 있지만, 내가 무엇을 제안하는 코드를 볼 필요가있다. – Tom

+0

애니메이션 도중 스레드 또는 실행 루프가 차단되지 않고 터치 이벤트 만 발생합니다. (그리고 기본적으로) –

+0

아, 좋아. 이것은 아마 내가보고있는 것입니다. 따라서 애니메이션 중에 터치 이벤트를 수신 할 수 없습니까? 하나의 작은 UIView가 몇 초 동안 알파 페이드를하고 있다면, 프로그램은 의도적으로 화면의 다른 곳에서 터치 이벤트를 허용하지 않을 것입니다. – johnbakers

답변

4

예, UIKit은 기본적으로 애니메이션 중에 상호 작용을 차단합니다. 무시하려면, UIViewAnimationOptionAllowUserInteraction을 설정

[UIView animateWithDuration:0.3 delay:0.0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^ 
{ 
    // ... 
} completion:NULL]; 
+0

감사합니다. 그게 그랬어. – johnbakers

1

UIKit은 스레드로부터 안전하지 않으므로 이러한 애니메이션은 모두 백그라운드 스레드가 아닌 주 스레드에서 발생해야합니다. 애플의 문서에서 인용 :

노는 응용 프로그램의 사용자 인터페이스 에 는 주 스레드에서 발생해야

고려 스레딩. 따라서 의 메서드를 호출하여 에서 실행중인 코드의 UIView 클래스를 응용 프로그램의 주 스레드라고 항상 호출해야합니다. 보기를 생성 할 때 이것이 단지 일 필요가없는 유일한 시간은 개체 자체입니다. 다른 모든 조작은 기본 스레드에서 발생해야합니다.