没有动画改变CAShapeLayer

我想设置strokeEnd一个财产CAShapeLayer都没有默认的动画,没有动画。 我环顾四周试图找到如何做到这一点,但似乎一切都是关于如何动画属性。


在核心动画术语中,动画更通用的术语是“动作”。 例如,您可以看到CAAnimation符合CAAction协议。 您还会看到禁用它们时使用的术语“操作”(禁用动画)。

改变层的动作有很多种不同的方法。 在关于CALayeractionForKey:文档的讨论中,他们中的很多都很好地被记录(摘录如下)。 其中一些在子类化时更为相关(也可以在子类中覆盖actionForKey:为新键添加更多隐式操作。

该方法按以下顺序搜索图层的关联操作:

  • 如果该图层具有委托并且该委托实现了访问图层的过滤器方法,则该图层将调用该方法。 代表必须执行以下任一操作:
  • 返回给定键的操作对象。
  • 如果它不处理该操作,则返回nil
  • 如果它不处理动作并且应该终止搜索,则返回NSNull对象。
  • 该图层在图层的actions字典中查找。
  • 该层在`样式字典中查找包含该键的动作字典。
  • 该层调用它的`defaultActionForKey:方法来查找任何类定义的操作。
  • 该层查找由Core Animation定义的任何隐式操作。
  • 当你想禁用动画时,最有趣的两种方式是(两种不同,因为它们用于稍微不同的事情):

  • 禁用CATransaction (未在上面提到)
  • 在动作字典(上面的数字2)中为@"strokeEnd"键设置[NSNull null]
  • 禁用操作

    如果您暂时想要针对多种不同的属性完全禁用操作,同时在其他地方还有动画,则使用事务来禁用动画是很好的做法。 在代码中,它看起来像这样:

    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    // change your property here 
    yourShapeLayer.strokeEnd = 0.7;
    [CATransaction commit]; // animations are disabled until here...
    

    更改动作字典

    您可以通过修改图层操作字典来永久更改一个或多个按键的默认动画。 设置[NSNull null]意味着不应该有动画,并且图层应该停止在其他地方寻找默认动画。 您也可以使用它来添加动画属性。 使用动作字典删除动画看起来像这样:

    yourShapeLayer.actions = @{@"strokeEnd": [NSNull null]};
    yourShapeLayer.strokeEnd = 0.7; // this won't have an animation
    

    你可以做如下的事情:

    NSDictionary *actions = @{@"strokeEnd": [NSNull null]};
    yourShapeLayer.actions = actions;
    

    这将使它不会为该属性生成动画。 您也可以通过将其添加到此来指定其他属性以不生成动画:

    NSDictionary *actions = @{@"strokeEnd": [NSNull null], @"position": [NSNull null], @"position": [NSNull null]};
    
    链接地址: http://www.djcxy.com/p/74253.html

    上一篇: Change CAShapeLayer without Animation

    下一篇: How to rotate a CAShapeLayer at its center point