2011-04-29 4 views
1

내 앱에서 나머지 뷰를 동결 또는 반복 애니메이션을 사용할 수있는 방법이 궁금합니다. 현재의 접근 방식이 100 % 애니메이션, 0 % 사용자 상호 작용으로 이어질 수 있습니다. 나쁜 ..UIView 애니메이션이 CPU 시간을 차지합니다

애니메이션은 일반적으로 간단합니다. 저는 사이렌과 같은 uilabel 동작을 만들고, 알파 속성을 1에서 0으로 변경하고 등을하고 싶습니다.

[UIView animateWithDuration:0.4f 
          delay:0.0f 
         options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionBeginFromCurrentState 
        animations:^(void){warningMessage.alpha = 0;} 
        completion:NULL];  

내가 응용 프로그램의 I 느슨한 통제, 심지어 비동기 GCD 블록에, backgroundthreads에, 백그라운드에서 때마다 호출을 시도 -하지만 애니메이션은 잘 작동 :

기본 애니메이션 블록은 그러므로 . (ok, apple docs는 주 스레드에서 발생해야한다고 말합니다.하지만 시도했습니다 ..)

다시 질문 : 두 가지 방법을 모두 가지고 있습니까? 그렇게해도 가능합니까?

미리 감사드립니다.

P.S : SRY 경우이 여기에 적절한 솔루션/질문을 꽤 재 게시 찾을 수 없습니다입니다!

P.P.S : 네, 사이렌 자신의 알파 때에 프로퍼티를 변경 해달라고 알고 : P

답변

1

당신이 옵션 플래그에 UIViewAnimationOptionAllowUserInteraction를 추가하려고 했습니까?

+0

좋은 힌트, 많이 감사합니다! – thedanielhanke

1

음 .. uikit으로 애니메이션을하는 것은 확실히 쉽습니다. 그러나 나는 그것을 매우 효율적이라고 부르지 않을 것입니다. 알파에 애니메이션을 적용하면되지만 배경에서는 훨씬 더 많은 일이 발생합니다. :)

애니메이션은 이미 다른 스레드에서 실행됩니다. 그래서 다른 스레드에서 시작하면 도움이되지 않습니다.

해결책으로 응용 프로그램에서 CADisplayLink를 등록하고 업데이트 기능에서보기의 알파를 변경하면 항상 실행하면 훨씬 효율적입니다.

+0

이 힌트를 보내 주셔서 감사합니다! 나는 당신의 대답을 읽고, 시도하고, 잘하면 받아 들일 것이다. :) – thedanielhanke

+0

제이슨의 솔루션은 사용하기가 훨씬 더 간단했다 - 나는 시간이 없어! 어쨌든 고마워요, 정말 고마워요! – thedanielhanke

관련 문제