如何在Cocoa的给定时间间隔内淡出矩形?

时间:2011-10-13 12:51:29

标签: macos cocoa animation graphics

我正在为OS X编写一个Cocoa应用程序,用户可以通过单击鼠标在NSView实例上绘制方块。目前,我使用performSelector:withObject:afterDelay: NSObject方法在2秒后使正方形消失,强制重绘视图,不包括正方形。

但是,我希望广场逐渐消失,而不仅仅是消失。我已经尝试使用NSTimer周期性地强制重绘,平方的不透明度在2秒内降低到0,但这看起来相当不优雅且可能效率低下,特别是如果我有很多正方形。

有没有惯用的方法呢?

更新:为了澄清,我希望视图中绘制的每个方格从绘制点开始都有一个独立的淡入淡出,我不打算淡出整个视图。

2 个答案:

答案 0 :(得分:1)

我最终使用的解决方案是为每个方块创建一个CALayer实例,而不是使用NSRectFill来绘制方块。然后,可以使用CALayer实例独立地动画每个CABasicAnimation实例的不透明度。 E.g。

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[animation setFromValue:[NSNumber numberWithFloat:1.]];
[animation setToValue:[NSNumber numberWithFloat:0.]];
[animation setDuration:2.];
[layer setOpacity:0.];
[layer addAnimation:animation forKey:@"opacity"];

答案 1 :(得分:0)

NSAnimationContext可能就是你要找的东西。