2010-05-28 22 views

Trả lời

7

Đơn giản hơn hoặc ít hơn. Bạn có một ivar CALayer *yourLayer. Sau đó, bạn thiết lập các đại biểu và thực hiện các phương pháp đại biểu -(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

Một cách khác nhau để làm điều này:

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

Đó là mã sẽ animate thay đổi các nội dung của CALayer hơn 2,5 giây. Bạn cũng có thể sử dụng tính năng này để tắt hoàn toàn tất cả hoạt ảnh. Như thế này:

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

Bạn chỉ có thể gọi:

[CATransaction setAnimationDuration:durationSecs] 

trong -layoutSublayers hoặc bất cứ nơi nào khác mà bạn sửa đổi các lớp và mong đợi họ ngầm động. Điều này sẽ ảnh hưởng đến giao dịch ngầm hiện tại và bất kỳ giao dịch phụ nào trong giao dịch này.

+0

Tôi lấy đối tượng 'Giao dịch' ở đâu? –

+0

'' 'CATransaction''' là một lớp. '' 'setAnimationDuration: seconds''' là một phương thức lớp. Trong trường hợp này, nó đặt thời lượng cho giao dịch hiện tại. –

+0

Cảm ơn, tôi hiểu ngay bây giờ. –

Các vấn đề liên quan