我正在为OS X编写一个Cocoa应用程序,用户可以通过单击鼠标在NSView
实例上绘制方块。目前,我使用performSelector:withObject:afterDelay:
NSObject
方法在2秒后使正方形消失,强制重绘视图,不包括正方形。
但是,我希望广场逐渐消失,而不仅仅是消失。我已经尝试使用NSTimer
周期性地强制重绘,平方的不透明度在2秒内降低到0,但这看起来相当不优雅且可能效率低下,特别是如果我有很多正方形。
有没有惯用的方法呢?
更新:为了澄清,我希望视图中绘制的每个方格从绘制点开始都有一个独立的淡入淡出,我不打算淡出整个视图。
答案 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可能就是你要找的东西。