2012-04-01 24 views
7

Tôi luôn nghĩ rằng Core Animation thực hiện hình động trên nền. Khi tôi chạy mã này, tương tác giao diện người dùng của tôi bị chặn cho đến khi kết thúc hoạt hình:Tại sao -animateWithDuration: delay: options: animations: completion: chặn giao diện người dùng?

[UIView animateWithDuration:4.5 
         delay:0 
        options:options 
       animations:^{ 
        oldView.alpha = 0; 
        newView.alpha = 1; 
       } 
       completion:^(BOOL finished) { 
        if (finished) { 
         [oldView removeFromSuperview]; 
        } 
       }]; 

Giống như bạn có thể thấy thời lượng dài vì vậy nó có thể nhìn thấy rõ ràng rằng sự tương tác giao diện người dùng bị chặn trong khi hiệu ứng động.

Tương tác giao diện người dùng bắt đầu bị chặn khi hoạt ảnh bắt đầu và kết thúc bị chặn khi hoạt ảnh kết thúc.

Có cách nào để bắt đầu hoạt ảnh UIView đồng thời để các tương tác giao diện người dùng không bị chặn không?

EDIT để làm rõ: Tôi biết rằng giao diện người dùng bị chặn vì tôi không thể tương tác với bất kỳ điều khiển trên màn hình tại sao hoạt hình này đang chạy. Những điều khiển khác không liên quan đến những gì đang được làm động và không nằm trên cùng một nhánh trong hệ thống phân cấp khung nhìn. Toàn bộ giao diện người dùng bị chặn khi hoạt ảnh này chạy. Khi tôi đặt nó thành 10 giây, giao diện người dùng bị chặn trong 10 giây trong khi hoạt ảnh chạy. Thử nghiệm với iOS 4.2 trên iPhone 4.

+0

Làm thế nào để bạn biết nó bị chặn? Trừ khi chế độ xem có alpha là 0, tất cả các chế độ xem đằng sau chế độ xem có tương tác bị vô hiệu hóa. – CodaFi

+0

Đã cập nhật câu hỏi bằng cách làm rõ. –

Trả lời

18

Nhìn vào tài liệu cho UIView, tôi thấy điều này trong phần thảo luận cho phương pháp đó:

Trong một hình ảnh động, tương tác người dùng đang tạm thời bị vô hiệu hóa cho các quan điểm được hoạt hình. (Trước iOS 5, tương tác của người dùng bị tắt cho toàn bộ ứng dụng.) Nếu bạn muốn người dùng có thể tương tác với các chế độ xem, hãy bao gồm hằng số UIViewAnimationOptionAllowUserInteraction trong tham số tùy chọn.

Vì vậy, nếu bạn muốn tương tác người dùng tiếp tục được cho phép, bạn phải đặt hằng số này trong thông số tùy chọn.

5

Documentation là bạn của bạn :)

UIView Class Reference

Dưới animateWithDuration: hình ảnh động:

"Trong một hình ảnh động, tương tác người dùng đang tạm thời bị vô hiệu hóa cho lượt xem đang hoạt ảnh. (Trước iOS 5, tương tác của người dùng bị tắt cho toàn bộ ứng dụng.) "

Và tất nhiên, cho tất cả v iews dưới chế độ xem hoạt hình.

+1

Làm thế nào tôi có thể đã bỏ lỡ điều đó !!! Thánh bò. Tôi cần cặp kính to hơn. Cảm ơn. –

+0

thử phương pháp của jmstone với 'UIViewAnimationOptionAllowUserInteraction' - hy vọng nó thực hiện thủ thuật :) –

+1

nó hoàn toàn là thủ thuật. Lưu năm của tôi. Tuyệt quá. –

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