首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何禁用CALayer隐式动画?

如何禁用CALayer隐式动画?
EN

Stack Overflow用户
提问于 2011-04-29 22:38:54
回答 10查看 27.8K关注 0票数 50

快把我逼疯了!我正在开发一个绘图应用程序。假设我正在处理一个名为sheet的UIView

我正在向这个视图([sheet.layer addSublayer:...])添加一些子层,然后我想要绘制它们。为此,我创建了一个CGImageRef并将其放入层的contents中。但它是动画的,我不想那样。

我什么都试过了:

  • removeAnimationForKey:
  • removeAllAnimations
  • set dictionary
  • using actionlayer delegate
  • [CATransaction setDisableAnimations:YES]

的操作

看起来是对的。我不明白为什么这一层仍然是动画;_;

我做错了什么吗?有什么秘密的方法吗?

EN

回答 10

Stack Overflow用户

发布于 2016-01-22 16:00:51

Swift

代码语言:javascript
复制
CATransaction.begin()
CATransaction.setDisableActions(true)

// change layer properties that you don't want to animate

CATransaction.commit()
票数 56
EN

Stack Overflow用户

发布于 2011-05-02 04:59:22

您必须通过将代码包装在CATransaction中来显式禁用动画

代码语言:javascript
复制
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];
layer.content = someImageRef;
[CATransaction commit];
票数 45
EN

Stack Overflow用户

发布于 2011-11-03 14:29:16

另一种方式:

  1. 您应该禁用sheet.layer的默认动画,它在添加子层时被隐式调用。
  2. 您还应该禁用每个子层的内容动画。当然,您可以在每次设置sublayer.content时使用CATransaction的"kCATransactionDisableActions“。但是,您可以在创建子图层时禁用此动画一次。

下面是代码:

代码语言:javascript
复制
// disable animation of container
sheet.layer.actions = [NSDictionary dictionaryWithObject:[NSNull null] 
                                                  forKey:@"sublayers"];

// disable animation of each sublayer
sublayer.layer.actions = [NSDictionary dictionaryWithObject:[NSNull null] 
                                                     forKey:@"content"];

// maybe, you'll also have to disable "onOrderIn"-action of each sublayer.       
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5833488

复制
相关文章

相似问题

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