完成动画后,NSView Frame Origin重置(动画师代理)

时间:2018-01-24 12:57:10

标签: swift macos cocoa core-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))

enter image description here

1 个答案:

答案 0 :(得分:0)

这是对的。在Cocoa中,动画效果就是:对象外观的临时扭曲。这可以包括对其不透明度,帧,大小,变换等的更改。当动画结束并被丢弃时,视图对象将返回到与任何其他视图对象一样的行为。

如果您想使用此类动画更改视图的某些内容,解决方法是:

  1. 获取视图的框架
  2. 将视图的框架设置为您希望其结束的位置
  3. 开始一个从它所在位置开始的动画 结束现在的地方
  4. 然后视图从A移动到B,当动画结束时,框架现在在B处。

    另一种技术是添加“do end animation”处理程序,并将框架设置为新位置,或者只是隐藏它。