2010-05-28 86 views

回答

7

或多或少很简单。你有一个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 
} 
10

一种不同的方式来做到这一点:

[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]; 

该代码将动画的CALayer的的内容的变化超过2.5秒。您也可以使用它来完全禁用所有动画。就像这样:

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

你可以只要致电:

[CATransaction setAnimationDuration:durationSecs] 
在-layoutSublayers

或其他任何地方,你修改图层,并期望他们含蓄动画。这将影响当前的隐式事务和这一个中的任何子事务。

+0

我从哪里获得'CATransaction'对象? – 2016-07-09 18:35:40

+0

'''CATransaction'''是一个类。 'setAnimationDuration:seconds'''是一个类方法。在这种情况下,它设置当前交易的持续时间。 – 2016-07-11 04:11:20

+0

谢谢,我现在明白了。 – 2016-07-11 12:05:53