【问题标题】:Cocoa: run block after animation on OSXCocoa:在 OSX 上动画后运行块
【发布时间】:2012-09-03 00:45:31
【问题描述】:

我正在使用 animator 来实现动画,比如

[[self.view animator] setFrame:newFrame];

但我想在动画结束后运行一个方法或块,如下:

[[self.view animator] setFrame:newFrame onComplete:^{
    NSLog(@"****");
}];

有什么方法可以实现吗?

【问题讨论】:

标签: macos cocoa


【解决方案1】:

你应该使用NSAnimationContext,它是completionHandler

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setCompletionHandler:^{
    NSLog(@"****");
}];
[[self.view animator] setFrame:newFrame];
[NSAnimationContext endGrouping];

【讨论】:

  • 我认为您应该在执行动画之前设置完成处理程序。
  • @Samir 在文档中找不到任何确认信息,但我认为您是对的。我已经更新了我的答案。
  • @Dmitry 检查文档here。它拥有处理 NSAnimationContext 所需的一切。
  • 确认如果您在之前执行动画(即使用animator)未设置完成处理程序,那么您的完成处理程序被调用得太早.
【解决方案2】:

我从 WWDC 视频中找到了另一个解决方案,希望下面的代码对其他人有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多