首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在-[CALayer setNeedsDisplayInRect:]中禁用隐式动画

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

Stack Overflow用户
提问于 2010-02-11 19:44:23
回答 15查看 51.2K关注 0票数 141

我有一个层,在它的-drawInContext:方法中有一些复杂的绘图代码。我正在尝试最小化我需要做的绘图量,所以我使用-setNeedsDisplayInRect:来只更新修改过的部分。这工作得很好。然而,当图形系统更新我的图层时,它使用交叉淡入淡出从旧图像过渡到新图像。我希望它能立即切换。

我尝试过使用CATransaction关闭操作并将持续时间设置为零,但都不起作用。下面是我使用的代码:

代码语言:javascript
复制
[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];

在CATransaction上有没有不同的方法我应该用来代替(我也尝试了-setValue:forKey: with kCATransactionDisableActions,同样的结果)。

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2010-02-11 21:37:15

可以通过在层上设置动作字典来执行此操作,以将[NSNull null]作为相应关键点的动画返回。例如,我使用

代码语言:javascript
复制
NSDictionary *newActions = @{
    @"onOrderIn": [NSNull null],
    @"onOrderOut": [NSNull null],
    @"sublayers": [NSNull null],
    @"contents": [NSNull null],
    @"bounds": [NSNull null]
};

layer.actions = newActions;

禁用插入或更改其中一个层中的子层时的淡入/淡出动画,以及层的大小和内容的更改。我相信contents钥匙就是你要找的,以防止更新后的图纸出现交叉褪色。

Swift版本:

代码语言:javascript
复制
let newActions = [
        "onOrderIn": NSNull(),
        "onOrderOut": NSNull(),
        "sublayers": NSNull(),
        "contents": NSNull(),
        "bounds": NSNull(),
    ]
票数 178
EN

Stack Overflow用户

发布于 2011-03-31 00:11:21

另外:

代码语言:javascript
复制
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

//foo

[CATransaction commit];
票数 90
EN

Stack Overflow用户

发布于 2014-07-08 18:05:33

当您更改图层的属性时,CA通常会创建一个隐式事务对象来为更改设置动画。如果不想为更改设置动画,可以通过创建显式事务并将其kCATransactionDisableActions属性设置为true来禁用隐式动画。

Objective-C

代码语言:javascript
复制
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
// change properties here without animation
[CATransaction commit];

斯威夫特

代码语言:javascript
复制
CATransaction.begin()
CATransaction.setValue(kCFBooleanTrue, forKey: kCATransactionDisableActions)
// change properties here without animation
CATransaction.commit()
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2244147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档