内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我有一个图层,其中包含了一些复杂的绘图代码,包括-drainContext:Method。我正在尽量减少我需要做的绘图量,所以我使用-setNeedsDisplayInRect:只更新更改的部分。这件事做得很好。但是,当图形系统更新我的图层时,它正在使用交叉淡出的方式从旧的图像过渡到新的图像。
我尝试过使用CATransaction关闭操作并将持续时间设置为零,但两者都不起作用。下面是我使用的代码:
[CATransaction begin]; [CATransaction setDisableActions: YES]; [self setNeedsDisplayInRect: rect]; [CATransaction commit];
在CATransaction上是否有不同的方法我应该使用(我也尝试过-setValue:Forkey:With kCATransactionDisableActions,相同的结果)。
可以通过设置图层上的操作字典返回来完成此操作。[NSNull null]
作为动画的适当键。例如,我使用
NSDictionary *newActions = @{ @"onOrderIn": [NSNull null], @"onOrderOut": [NSNull null], @"sublayers": [NSNull null], @"contents": [NSNull null], @"bounds": [NSNull null] }; layer.actions = newActions;
禁用在我的一个层中插入或更改子层的淡入/退出动画,以及图层大小和内容的更改。我相信contents
键是您正在寻找的,以防止交叉褪色更新的绘图。
此外:
[CATransaction begin]; [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; //foo [CATransaction commit];