2012-04-11 61 views
3

我有一个NSAnimationContext(只是一个滚动视图),我希望在光标进入视图时减慢和/或暂停。我已经在这种情况发生时实施了检测 - 现在我只需要弄清楚如何减慢已经在进行的动画。我已经想出了如何用CALayers做到这一点 - 但我需要使用动画代理无法在此动画中使用多个AppKit视图,因此Core Animation将无法工作。有谁知道如何做到这一点?有没有办法跟踪NSAnimationContexts,然后再改变它们?减速或暂停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 2012-04-11 20:59:49

+1

奇怪。你能证明你在做什么吗? – 2012-04-11 21:10:56

+0

你可以尝试删除完成处理程序吗?这会改变什么吗?另外,在第二种情况下,您不想在执行'-setFrame之前设置持续时间:? – 2012-04-12 15:51:37