动画代理setFrameOrigin
使动画完成后 View 闪回到原点位置。我使用下面的代码对 NSView
进行动画处理,使其向下移动 -50
点,但是,当动画完成时,帧位置似乎重置为 0
code> 并导致 View 闪烁。
我为此 View 设置了自动布局约束,我认为此位置重置可能是由自动布局引起的。
NSAnimationContext.beginGrouping()
NSAnimationContext.current.duration = 0.5
barVersionFree.animator().setFrameOrigin(NSPoint(x: 0, y: -50))
NSAnimationContext.endGrouping()
我尝试使用下面的代码再次设置它,但结果是相同的。
NSAnimationContext.beginGrouping()
NSAnimationContext.current.duration = 0.5
barVersionFree.animator().setFrameOrigin(NSPoint(x: 0, y: -50))
NSAnimationContext.endGrouping()
barVersionFree.setFrameOrigin(NSPoint(x:0, y: -50))
最佳答案
这是正确的。在 Cocoa 中,动画效果就是:对象外观的暂时扭曲。这可以包括对其不透明度、框架、大小、变换等的更改。当动画结束并被丢弃时, View 对象会立即返回到像任何其他 View 对象一样的行为。
如果您想使用这种类型的动画更改 View 的某些内容,解决方案是:
- 获取 View 的框架
- 将 View 框架设置为您想要的结束位置
- 从原来的位置开始播放动画 结束于现在的位置
然后 View 似乎从 A 移动到 B,当动画结束时,帧现在位于 B。
另一种技术是添加“结束动画”处理程序,并将框架设置到新位置,或者只是隐藏它。
关于swift - 动画完成后 NSView 帧原点重置(动画代理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423092/