Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Cocoa中,如何在给定的时间间隔内淡出矩形?_Macos_Cocoa_Animation_Graphics - Fatal编程技术网

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

Macos 在Cocoa中,如何在给定的时间间隔内淡出矩形?,macos,cocoa,animation,graphics,Macos,Cocoa,Animation,Graphics,我正在为OSX编写一个Cocoa应用程序,用户可以通过单击鼠标在NSView实例上绘制正方形。目前,我正在使用NSObject的performSelector:withObject:afterDelay:方法使正方形在2秒后消失,以强制重新绘制视图,不包括正方形 然而,我不想只是消失,我希望广场逐渐淡出。我曾尝试使用NSTimer定期强制重画,正方形的不透明度在2秒内降低到0,但这似乎不太雅观,而且可能效率低下,尤其是如果我有很多正方形的话 有没有一种惯用的方法可以做到这一点 更新:为了澄清,我

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

然而,我不想只是消失,我希望广场逐渐淡出。我曾尝试使用
NSTimer
定期强制重画,正方形的不透明度在2秒内降低到0,但这似乎不太雅观,而且可能效率低下,尤其是如果我有很多正方形的话

有没有一种惯用的方法可以做到这一点


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

可能就是您想要的。

我最终使用的解决方案是为每个正方形创建一个
CALayer
实例,而不是使用
NSRectFill
绘制正方形。然后,可以使用
CABasicAnimation
实例对每个
CALayer
实例的不透明度单独设置动画。例如

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"];

如果使用NSBezierPath或NSRect绘制,则应能够使用NSColor:yourObjectOneColor=[NSColor color color:(float)0.0绿色:(float)0.0蓝色:(float)0.0 alpha:(float)1.0]设置路径或rect的颜色属性;因此,尝试将动画设置为0.0的alpha值
NSAnimationContext
看起来很方便,但对于我所需要的内容来说,这是一种过分的做法<代码>CABasicAnimation已足够(见上文)。