可可 - 两个NSImage之间淡出?

时间:2011-02-28 12:37:06

标签: cocoa macos core-animation nsimage

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

3 个答案:

答案 0 :(得分:3)

这取决于菜单显示图像的方式。如果它是菜单项本身,没有很多hackery这是不可能的。如果您在菜单中使用自定义NSView,那么您可以使用两个NSImageViews并使用视图的-animator在它们之间进行交换。

你将imageViewB的帧与imageViewA匹配(如果还没有),然后通过动画师替换子视图:

[[parentView animator] replaceSubview:imageViewA with:imageViewB];

...或从b回到a。

不幸的是,NSImageView的-animator代理不会动画-setImage :(没有明显的原因)所以你需要使用两个视图并为交换设置动画。

答案 1 :(得分:3)

我认为最有价值的例子之一是ImageTransition。来自iOS世界,至少对我来说很容易理解。 http://developer.apple.com/library/mac/samplecode/ImageTransition/ImageTransition.zip

希望它有所帮助, 保罗

答案 2 :(得分:1)

您可以尝试使用此功能。它是用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