Cocoa - 两个 NSImage 之间的淡入淡出?

Nip*_*rus 5 macos cocoa core-animation nsimage

我有一个带有 NSImage 的菜单,显示一些信息,当它更新时,我希望新的(更新的)图像淡入。我知道这在 iPhone 上很容易,但这在 OS X 中可能吗?

Sil*_* St 6

你可以尝试使用这个。它是用 Swift 4 编写的

 let transition = CATransition() //create transition
 transition.duration = 4 //set duration time in seconds
 transition.type = .fade //animation type
 transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
 self.imageView.layer?.add(transition, forKey: nil) //add animation to your imageView's layer
 self.imageView.image = NSImage(named: "test_image") //set the image
Run Code Online (Sandbox Code Playgroud)


Jos*_*zzi 3

这取决于您的菜单如何显示图像。如果是菜单项本身,那么如果没有大量的黑客技术,这是不可能的。如果您在菜单中使用自定义 NSView,则可以使用两个 NSImageView 并使用视图的 -animator 在它们之间进行交换。

您可以将 imageViewB 的框架与 imageViewA 相匹配(如果尚未匹配),然后通过动画制作器替换子视图:

[[parentView animator] replaceSubview:imageViewA with:imageViewB];
Run Code Online (Sandbox Code Playgroud)

...或从 b 返回 a。

不幸的是, NSImageView 的 -animator 代理不会对 -setImage: 进行动画处理:(没有明显的原因),因此您需要使用两个视图并对交换进行动画处理。