[CALayer setNeedsDisplayInRect:]
我有一个在其-drawInContext:方法中有一些复杂绘图代码的图层。 我想尽量减少我需要做的绘图数量,所以我使用-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];
当您更改图层的属性时,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()
链接地址: http://www.djcxy.com/p/74161.html