2009-01-03 37 views
6

Tôi đang tạo một ứng dụng trong iPhone và tôi có một số UIViews và các lớp trong đó. Tôi đang làm một số hình ảnh động bằng cách sử dụng lớp CAKeyframeAnimation và kể từ khi hình ảnh động phải được xích, tôi đã ghi đè phương thức animationDidStop trong UIView.Tôi cần trợ giúp với Hoạt ảnh gọi lại (iPhone)

Tôi nhận được cuộc gọi lại đúng cách, tuy nhiên tôi không thể tìm ra cách tôi có thể tìm thấy hoạt ảnh nào đã kết thúc để tôi có thể bắt đầu hoạt ảnh tiếp theo. Chỉ các tham số cho hàm gọi lại là đối tượng CAAnimation và boolean.

Tôi có thể khắc phục sự cố này bằng cách đặt thuộc tính trong lớp và sử dụng enum cho các hoạt ảnh khác nhau mà tôi sử dụng. Tuy nhiên tôi chỉ muốn biết nếu có bất kỳ thuộc tính được xây dựng trong các callbacks mà tôi có thể thiết lập trong đối tượng CAKeyframeAnimation và sau đó tham khảo tương tự trong callback.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

11

Tôi biết rằng bạn đã nói rằng bạn đang sử dụng CAKeyframeAnimations, nhưng nếu bạn muốn hoạt ảnh đơn giản của thuộc tính UIView (nguồn gốc, giới hạn, alpha, v.v.), bạn có thể thay đổi thuộc tính hoặc thuộc tính trong phần bắt đầu/cam kết khối và chỉ định một phương pháp đại biểu được gọi là sau khi hoàn thành các hình ảnh động. Miễn là phương thức đại biểu có ba đối số, bạn có thể gọi nó là bất cứ điều gì bạn muốn. Ví dụ:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(yourAnimationHasFinished:finished:context:)]; 
// Change property or properties here 
[UIView commitAnimations]; 

sẽ gây phương pháp

- (void)yourAnimationHasFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context; 

được gọi. Việc đặt tên tùy ý này cho phép sẽ cung cấp cho bạn một phương tiện tách xử lý để hoàn thành các hoạt ảnh khác nhau. Tôi thích điều này cho hình ảnh động đơn giản.

Để xử lý các hoạt ảnh phức tạp hơn tương tác trực tiếp với CALayers, animationDidStop: finished: delegate method trả về đối tượng hoạt ảnh đã hoàn thành. Nếu bạn đang tạo một cá thể đại diện cho nhiều hoạt ảnh, bạn có thể tạo một NSMutableDictionary hoạt ảnh và NSNumbers để sử dụng trong một câu lệnh switch trong phương thức animationDidStop: finished:. Khi bạn tạo CAKeyframeAnimation, sử dụng setObject: forKey: để gán nó cho số phù hợp của nó, sau đó sử dụng objectForKey: để tìm số tương ứng với hoạt ảnh đó trong phương thức hoàn thành và nạp nó vào một câu lệnh switch.

13

Bạn có thể chỉ định tên cho hoạt ảnh và đọc tên đó theo phương thức đại biểu của mình.

[animation setValue:"firstAnimation" forKey:@"name"]; 

...

- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished { 
    if([[animation valueForKey:@"name"] isEqual:@"firstAnimation"] && finished) { 
    ... 
    } 
} 
+1

i couldnt chỉnh sửa nó, nhưng nó cần @ trước khi "firstAnimation" vào dòng [hoạt hình setValue: "firstAnimation" forKey: @ "name"]; – efeyc

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