在-[CALayer setNeedsDisplayInRect:]中禁用隐式动画

我的-drawInContext:方法中有一个包含一些复杂绘图代码的层。我试图尽量减少需要做的绘图,所以我使用-setNeedsDisplayInRect:来仅更新已更改的零件。这是出色的工作。但是,当图形系统更新我的图层时,它会使用淡入淡出功能从旧图像过渡到新图像。我希望它可以立即切换。


我尝试使用CATransaction关闭操作并将持续时间设置为零,但都无法正常工作。这是我正在使用的代码:


[CATransaction begin];

[CATransaction setDisableActions: YES];

[self setNeedsDisplayInRect: rect];

[CATransaction commit];

我应该改用CATransaction上的其他方法吗(我也尝试了-setValue:forKey:和kCATransactionDisableActions,结果相同)。


MMMHUHU
浏览 612回答 3
3回答

德玛西亚99

也:[CATransaction begin];[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];//foo[CATransaction commit];

慕工程0101907

更改图层的属性时,CA通常会创建一个隐式事务对象以使更改动起来。如果您不想为更改设置动画,则可以通过创建显式事务并将其kCATransactionDisableActions属性设置为true来禁用隐式动画。目标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 animationCATransaction.commit()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS