NSView Frame Origin 在动画完成后重置(Animator 代理)
NSView Frame Origin Get Reset After Animation Completed (Animator Proxy)
动画代理setFrameOrigin
在动画完成后使视图闪回原点。我使用下面的代码为 NSView
设置动画以向下移动 -50
点,但是,当动画完成时,帧位置似乎重置为 0
并导致视图闪烁.
我为此视图设置了自动布局约束,我认为此位置重置可能是由自动布局引起的。
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 中,动画效果就是:对象外观的暂时扭曲。这可以包括对其不透明度、框架、大小、变换等的更改。当动画结束并被丢弃时,视图对象立即返回到与任何其他视图对象一样的行为。
如果您想使用这种类型的动画更改视图,解决方案是:
- 获取视图的框架
- 将视图的框架设置到您希望它结束的位置
- 从原来的位置开始动画
在现在的位置结束
然后视图似乎从 A 移动到 B,当动画结束时,帧现在位于 B。
另一种技术是添加 "did end animation" 处理程序并将框架设置到新位置,或者只是隐藏它。
动画代理setFrameOrigin
在动画完成后使视图闪回原点。我使用下面的代码为 NSView
设置动画以向下移动 -50
点,但是,当动画完成时,帧位置似乎重置为 0
并导致视图闪烁.
我为此视图设置了自动布局约束,我认为此位置重置可能是由自动布局引起的。
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 中,动画效果就是:对象外观的暂时扭曲。这可以包括对其不透明度、框架、大小、变换等的更改。当动画结束并被丢弃时,视图对象立即返回到与任何其他视图对象一样的行为。
如果您想使用这种类型的动画更改视图,解决方案是:
- 获取视图的框架
- 将视图的框架设置到您希望它结束的位置
- 从原来的位置开始动画 在现在的位置结束
然后视图似乎从 A 移动到 B,当动画结束时,帧现在位于 B。
另一种技术是添加 "did end animation" 处理程序并将框架设置到新位置,或者只是隐藏它。