2012-04-11 2 views
3

커서가보기로 들어갈 때마다 속도를 줄이거 나 일시 중지하려는 NSAnimationContext (스크롤보기)가 있습니다. 이미 이런 일이 발생했을 때 감지 기능을 구현했습니다. 이제는 이미 진행중인 애니메이션을 느리게하는 방법을 알아야합니다. CALayers로이 작업을 수행하는 방법을 알아 냈습니다.하지만이 애니메이션에서 여러 AppKit보기를 사용할 수없는 애니메이터 프록시를 사용해야하므로 코어 애니메이션이 작동하지 않습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? NSAnimationContexts를 추적하고 나중에 변경하는 방법이 있습니까?Slow Down 또는 Pause NSAnimationContext

여기 내 코드의 하위 섹션 인 첫 번째 블록이 순환 게재됩니다. 매번 하나의 협동이 완료 될 때마다 다음 협상이 시작됩니다.

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){ 
    context.duration = pixels/speed; 
    [[currentTweetView animator] setFrame:endRect]; 
} completionHandler:^{ 
    [currentTweetView removeFromSuperview]; 
    currentTweetView = nil; 
    [self nextAnimationWithAnimationIndex:currentIndex]; 
}]; 

다음은 mouseEntered : 메소드의 코드입니다. 이것이 호출 될 때마다 completionHandler도 호출되지 않고 앱이 정지됩니다.

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){ 
    [[[self.subviews objectAtIndex:0] animator] setFrame:finalRect]; 
    context.duration = 100.0; 
} completionHandler:^{ 
    NSLog(@"done"); 
}]; 

또한, 완료 핸들러를 조기 아닌 NSAnimationContext을 종료 호출 할 수있는 방법은 무엇입니까?

답변

0

프록시를 사용하여 animator 프록시를 다시 설정하면 다른 NSAnimationContext, 아래에서 진행중인 애니메이션이 대체됩니다. 이것은 (예를 들어, 새로운 목적지로) 애니메이션의 타겟을 재설정하는 것과 유사 할 것이다.

+0

방금 ​​시도했지만 앱이 정지되고 두 번째 애니메이션이 실행되지 않고 앱이 정지됩니다. – xizor

+1

이상합니다. 당신이하고있는 것을 보여줄 수 있습니까? –

+0

완성 처리기를 빠져 나올 수 있습니까? 그게 아무것도 바뀌 었습니까? 또한 두 번째 경우'-setFrame :'을하기 전에 지속 시간을 설정하고 싶지 않으십니까? –