2010-05-28 117 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