我有一个层,在它的-drawInContext:方法中有一些复杂的绘图代码。我正在尝试最小化我需要做的绘图量,所以我使用-setNeedsDisplayInRect:来只更新修改过的部分。这工作得很好。然而,当图形系统更新我的图层时,它使用交叉淡入淡出从旧图像过渡到新图像。我希望它能立即切换。
我尝试过使用CATransaction关闭操作并将持续时间设置为零,但都不起作用。下面是我使用的代码:
[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];在CATransaction上有没有不同的方法我应该用来代替(我也尝试了-setValue:forKey: with kCATransactionDisableActions,同样的结果)。
发布于 2010-02-11 21:37:15
可以通过在层上设置动作字典来执行此操作,以将[NSNull null]作为相应关键点的动画返回。例如,我使用
NSDictionary *newActions = @{
@"onOrderIn": [NSNull null],
@"onOrderOut": [NSNull null],
@"sublayers": [NSNull null],
@"contents": [NSNull null],
@"bounds": [NSNull null]
};
layer.actions = newActions;禁用插入或更改其中一个层中的子层时的淡入/淡出动画,以及层的大小和内容的更改。我相信contents钥匙就是你要找的,以防止更新后的图纸出现交叉褪色。
Swift版本:
let newActions = [
"onOrderIn": NSNull(),
"onOrderOut": NSNull(),
"sublayers": NSNull(),
"contents": NSNull(),
"bounds": NSNull(),
]发布于 2011-03-31 00:11:21
另外:
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
//foo
[CATransaction commit];发布于 2014-07-08 18:05:33
当您更改图层的属性时,CA通常会创建一个隐式事务对象来为更改设置动画。如果不想为更改设置动画,可以通过创建显式事务并将其kCATransactionDisableActions属性设置为true来禁用隐式动画。
Objective-C
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// change properties here without animation
[CATransaction commit];斯威夫特
CATransaction.begin()
CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
// change properties here without animation
CATransaction.commit()https://stackoverflow.com/questions/2244147
复制相似问题