2010-11-09 36 views
5

Tôi gặp phải sự cố lạ với khối hoạt ảnh trên iPhone. Mã này:UIView animateWithDuration: delay: working weird

[UIView animateWithDuration:2 delay: 0 options: 0 animations: 
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; } 
completion: nil]; 

[UIView animateWithDuration:2 delay: 2 options: 0 animations: 
^(void) { [controller setBackgroundColor: [UIColor redColor]]; } 
completion: nil]; 

Ngay lập tức đặt nền thành màu đỏ, không chuyển trạng thái xanh lam. Điều tương tự ngay cả đối với mã này:

[UIView animateWithDuration:2 delay: 0 options: 0 animations: 
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; } 
completion: 

^(BOOL wrwg) { 
    [UIView animateWithDuration:2 delay: 2 options: 0 animations: 
    ^(void) { [controller setBackgroundColor: [UIColor redColor]]; } 
    completion: nil]; 
}]; 

Đó là, nơi tôi cố gắng chạy các hình ảnh động thứ hai sau khi người đầu tiên đã kết thúc. Có vấn đề gì?

+0

Loại đối tượng nào là bộ điều khiển? Một UIView, UILabel, khác? – Anna

Trả lời

8

Tôi đã gặp vấn đề tương tự. Làm cho shure rằng bộ điều khiển là loại UIView nếu không khối hoạt hình được hiểu là "không có hoạt hình để thực hiện" và do đó bỏ qua và các hình ảnh động tiếp theo được trả lại.

Cũng có cái nhìn bài này nơi tôi hỏi những câu hỏi tương tự (với giải pháp của tôi): http://www.iphonedevsdk.com/forum/iphone-sdk-development/64451-animation-one-after-another.html#post265531

3

Tôi chỉ có vấn đề này, và tôi thường có nó. Có hai nguyên nhân, mặc dù một là một cái gì đó tôi chưa thử nghiệm.

Nguyên nhân một, tôi quên kết nối trình tạo giao diện với chế độ xem động, do đó khối nói "Animate on nil? Không có gì để làm, vì vậy tôi sẽ bỏ qua khối hoàn thành!"

Nguyên nhân khác là, có điều gì đó cần làm, nhưng nó không phải là một thuộc tính có thể hoạt hình (Ẩn), và tôi đặt cược rằng khối hoàn thành được gọi ngay khi các biến trong hoạt ảnh khớp với "tới" hoặc " kết thúc "trạng thái. Nó chỉ là một lý thuyết, nhưng tôi cá rằng đó là một chuỗi riêng biệt thực hiện ở một tốc độ nhất định với: if (currentValueOfProperty = finalValue) doCompletion(). (tha thứ cho mã giả).

Ai đó có lẽ nên kiểm tra rằng, mặc dù

5

tài sản backgroundColorKHÔNG hoạt hình trong UIView. Thay vào đó, hãy sử dụng thuộc tính backgroundColor của lớp của chế độ xem:

#import <QuartzCore/QuartzCore.h> // don't forget to link this library in project settings 

[UIView animateWithDuration:2.0 
         delay:0.0 
        options:UIViewAnimatingOptionBeginFromCurrentState 
       animations:^(void){ 
        controller.layer.backgroundColor = [UIColor blueColor].CGColor; 
       } 
       completion:NULL]; 

P.S. Như đã được chỉ ra trong các bài viết trước, hãy đảm bảo rằng controller của bạn được kế thừa từ UIView. Nếu được kế thừa từ UIViewController, hãy sử dụng controller.view để thay thế.

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