- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个动画可以移动一些 View 。当此动画完成时,我希望窗口重新计算键 View 循环。我的代码类似于以下模拟代码:
[NSAnimationContext beginGrouping];
[newView setAlpha: 0.0]; //hide newView
[self addSubView:newView];
//position the views
[[oldView animator] setFrame: newFrame1];
[[newView animator] setFrame: newFrame2];
[[newView animator] setAlpha: 1.0]; //fade-in newView
[NSAnimationContext endGrouping];
[[self window] recalculateKeyViewLoop];
此代码的问题是 recalculateKeyViewLoop
在 View 处于新位置之前被调用,这意味着 keyviewloop 是错误的。
我该如何解决这个问题?
我的第一个想法是在动画结束时的回调中调用 recalculateKeyViewLoop
,但我不知道该怎么做。
最佳答案
有一点不是很明显,或者至少对我来说不是,当你使用 frameSize
键执行 setFrame:
时,会出现两个动画和 frameOrigin
。
根据您的原始框架和最终框架,您可能需要将自己注册为其中一个或两个框架的代表。
我还建议您复制从 -animationForKey:
返回的动画,并将修改后的副本存储在对象的 animations
字典中。这样,您的委托(delegate)只会在该特定对象的动画持续时间结束时被调用,而不是所有为该键设置动画的对象。
例如。
CAAnimation *animation = [[view animationForKey:@"frameOrigin"] copy];
animation.delegate = self;
[view setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"frameOrigin"]];
通过这种方式,您的动画对象将取代该 View 的默认动画对象。然后实现您感兴趣的任何委托(delegate)方法。
关于objective-c - 如何在 NSAnimationContext 结束时触发回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330609/
我的动画可以在几个不同的相似 View (在数组中管理)上执行,但完成处理程序不接受参数。那么我如何在完成时知道我正在完成哪个动画? 以下内容用于对一个(多个)剖面 View 的框架进行动画处理。当动
我有一个 NSAnimationContext (只是一个 ScrollView ),我想在光标进入 View 时减慢和/或暂停。我已经实现了这种情况何时发生的检测 - 现在我只需要弄清楚如何减慢已经
我有一个简单的动画: [NSAnimationContext beginGrouping]; [[NSAnimationContext currentContext] setDuration:15.0
我想扩展 View 以响应对显示三角形的点击,但动画没有按照我想要的方式运行。 (抱歉,如果 gif 没有循环。该工具本应创建循环动画,但显然没有...) 当它展开时,外部 View 会立即改变大小,
我的问题是: NSAnimationContext 在 iOS 中工作吗? 如果问题 1 的答案是否定的,CATransaction 是一个好的替代品吗? 最佳答案 不,NSAnimationCont
我可以使用代码动画地移动图层托管 View : [CATransaction setAnimationDuration:2]; self.imageLayer.position = CGPointMa
如 NSAnimationContext 文档中所示,使用 NSAnimationContext.runAnimationGroup(_:_:) 为帧原点 和 大小设置动画预期用于某些 View 类型
我有一个简单的 Swift macOS 应用程序(使用 Xcode 8.2.1),其中包含一个 NSButton。当我单击按钮时,我希望它在指定的时间段内淡出。我以为我可以使用 NSAnimation
我有一个动画可以移动一些 View 。当此动画完成时,我希望窗口重新计算键 View 循环。我的代码类似于以下模拟代码: [NSAnimationContext beginGrouping];
我无法直接将其移植到 NSAnimationContext 的其余部分。 [[NSAnimationContext currentContext] setCompletionHandler:^(voi
我正在为一个 View 设置动画(通过显示它),之后我需要发布一个通知(一旦动画完成)。无论应用程序的设计方式如何,当隐藏 View 时(通过动画)会发出另一个通知。所以基本上我有一个“showVie
// wc here is an NSWindowController [NSAnimationContext beginGrouping]; [[NSAnimationContext
我是一名优秀的程序员,十分优秀!