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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我有一个图层,其中包含了一些复杂的绘图代码,包括-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];

扫码关注云+社区