为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
MMMHUHU 2019-10-24 10:11:46
我的-drawInContext:方法中有一个包含一些复杂绘图代码的层。我试图尽量减少需要做的绘图,所以我使用-setNeedsDisplayInRect:来仅更新已更改的零件。这是出色的工作。但是,当图形系统更新我的图层时,它会使用淡入淡出功能从旧图像过渡到新图像。我希望它可以立即切换。我尝试使用CATransaction关闭操作并将持续时间设置为零,但都无法正常工作。这是我正在使用的代码:[CATransaction begin];[CATransaction setDisableActions: YES];[self setNeedsDisplayInRect: rect];[CATransaction commit];我应该改用CATransaction上的其他方法吗(我也尝试了-setValue:forKey:和kCATransactionDisableActions,结果相同)。
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

也:


[CATransaction begin];

[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];


//foo


[CATransaction commit];


查看完整回答
反对 回复 2019-10-24
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

更改图层的属性时,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 animation

CATransaction.commit()


查看完整回答
反对 回复 2019-10-24
  • 3 回答
  • 0 关注
  • 611 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信