【问题标题】:CALayer animates with frame change?CALayer 动画帧变化?
【发布时间】:2012-08-19 15:33:52
【问题描述】:

我有一个已添加到视图中的 CALayer:

myView.myCALayer = [[CALayer alloc] init];
CGSize size = myView.frame.size;
myView.myCALayer.frame = CGRectMake(0, 0, size.width, size.height);
myView.myCALayer.backgroundColor = [[UIColor blackColor] CGColor];
[myView.layer addSublayer:myView.myCALayer];

当我在更改 myView 的框架后尝试更改 CALayer 的框架时,CALayer 的调整大小会产生动画。我没有向 CALayer 添加任何动画,所以我不明白这一点。我什至尝试在调整大小之前在图层上调用 removeAllAnimations,它仍然会为调整大小设置动画。

有人知道这里会发生什么吗?

【问题讨论】:

    标签: ios calayer


    【解决方案1】:

    在 Swift 4 中:

    CATransaction.begin()
    CATransaction.setDisableActions(true)
    /* Your layer / frame changes here */
    CATransaction.commit()
    

    【讨论】:

      【解决方案2】:

      实际上有一个为 CALayer 设置一些值的隐式动画。您必须在设置新帧之前禁用动画。

      [CATransaction begin];
      [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
      
      [myView.myCALayer.frame = (CGRect){ { 10, 10 }, { 100, 100 } ];
      
      [CATransaction commit];
      

      https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW3

      【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2014-03-22
      • 1970-01-01
      • 2011-02-24
      • 2012-08-05
      • 2010-12-06
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多