代码之家  ›  专栏  ›  技术社区  ›  Alexsander Akers

更改Calayer属性的动画时间

  •  8
  • Alexsander Akers  · 技术社区  · 15 年前

    我有一个加法器可以使它的图像内容发生变化。现在,我怎样才能改变动画发生的时间?

    3 回复  |  直到 11 年前
        1
  •  7
  •   MJN    11 年前

    这多少有点简单。你有一个IVAR CALayer *yourLayer . 然后设置委托并实现委托方法 -(id<CAAction>)actionForLayer:forKey:

    - (void)awakeFromNib {
        yourLayer.delegate = self;
        yourLayer.name = @"yourLayer";
    }  
    - (id <CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event {
        if([layer.name isEqualToString yourLayer.name]) { // Check for right layer
    
            CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath:event]; // Default Animation for 'event'
            ani.duration = .5; // Your custom animation duration
            return ani;
    
        } else return nil; // Default Animation
    }
    
        2
  •  19
  •   Ben Lachman    11 年前

    你可以打电话给:

    [CATransaction setAnimationDuration:durationSecs] 
    

    在-layoutPublishers或任何其他修改层并希望它们隐式动画的地方。这将影响当前的隐式事务和此事务中的任何子事务。

        3
  •  10
  •   Charliehorse    15 年前

    另一种方法是:

    [CATransaction begin];
    [CATransaction setValue:[NSNumber numberWithFloat:2.5f] forKey:kCATransactionAnimationDuration];
    //Perform CALayer actions, such as changing the layer contents, position, whatever.
    aCALayerObject.contents = [self newCALayerContents];    
    [CATransaction commit];
    

    这段代码将在2.5秒内使加莱尔的内容发生变化。您还可以使用它完全禁用所有动画。这样地:

    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];