2013-08-17 29 views
5

Tôi có một lớp con CALayer với phao animAngle làm thuộc tính được đánh dấu là @dynamic. Tôi đã triển khai các phương thức actionForKey, initWithLayer, needsDisplayForKeydrawInContext cho lớp con. Định nghĩa cho actionForKey như sauLớp con CALayer không hoạt ảnh để thay đổi thuộc tính

- (id<CAAction>)actionForKey:(NString *)event { 
    if([event isEqualToString:@"animAngle"]) { 
     return [self animationForKey:event]; 
    } 
    return [super actionForKey:event]; 
} 

- (CABasicAnimation *)animationForKey:(NSString *)key 
{ 
    NSString *animValue = [[self presentationLayer] valueForKey:key];// Logs as 0 
    CABasicAnimation *anim; 

    if([key isEqualToString:@"animAngle"]) { 
     anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
     anim.repeatCount = HUGE_VAL; 
     anim.autoreverses = YES; 
     //anim.fromValue = [[self presentationLayer] valueForKey:key]; // setting animation value from layer property as in here does not work. 
     anim.fromValue = [NSNumber numberWithFloat:0.5f];   // This works 
    } 
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    anim.duration = 0.11; 
    return anim; 
} 

Trong someother lớp:

myCASublayer.animAngle = 0.5f; 

Bằng cách nào đó CABasicAnimation được trả lại không có khả năng sử dụng đúng lớp "animAngle" bất động sản. Tôi có thể làm gì sai ở đây?

+0

Một được gọi là 'animAngle' khác là' wiggleAngle' –

+0

@RobvanderVeer: Xin lỗi đó là một lỗi đánh máy. AnimAngle của nó. – rawatm

+0

@ basstrekerk87, sao chép/dán tốt hơn lần sau, tiết kiệm lỗi! Bạn biết bạn không thực sự phải thụt lề mã bằng tay? Sử dụng nút hoặc bắt đầu với 3 backquotes (') –

Trả lời

1

CocoaHeads Session: Rob Napier on Animating Custom Layer Properties là bản trình bày hay về hoạt ảnh tùy chỉnh.

CALayers ghét làm vẽ;)

+0

cảm ơn, nó hoạt động. nhưng nếu hoạt ảnh là vô hạn trong số lần lặp lại, nó chỉ cho phép hoạt ảnh một lần. DrawInContext có được gọi là các hoạt ảnh lặp lại không? – rawatm

+0

@ basstrekker87 Tôi không chắc liệu hành động cho khóa có thể hỗ trợ lặp lại hay không. AFAIK nó ít nhiều là một hoạt ảnh ngầm từ một giá trị cũ sang một giá trị mới. –

+0

có thể có trường hợp như CALayers ghét vẽ :-) – rawatm

1

Nếu animAngle@property - bạn phải chỉ định accessors cho thuộc tính này.
Khi bạn đánh dấu thuộc tính là @dynamic điều này có nghĩa là bạn sẽ cung cấp một cách thực thi các phương thức đó một cách linh động khi chạy. Vì vậy, nếu bạn không cung cấp truy cập cho thuộc tính, bạn không thể truy cập nó.

+0

đã thử tạo accessors cho animAngle nhưng vẫn không hoạt động. @dynamic là bắt buộc đối với các lớp con CALayer cung cấp các bản triển khai cho chính thuộc tính đó, nhưng các thay đổi anyhows vẫn không được cập nhật – rawatm

+0

Điều đó không thực sự đúng đối với các CALayer. Chúng là ... "đặc biệt";) –

+0

@ DavidRönnqvist: Thật không đúng sự thật. câu trả lời của Lexandr hoặc bình luận tôi đã thêm vào. – rawatm

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