2011-09-25 42 views
7

Có một phương pháp được gọi bên trong một khối hoạt hình bởi API của bên thứ ba. Trong phương pháp đó, tôi phải xây dựng một số bản xem trước. Nhưng trong trường hợp này tôi không muốn hoạt ảnh xảy ra khi xây dựng các bản xem trước.Làm cách nào để tắt hoạt ảnh cho mã lồng nhau trong khối hoạt ảnh UIView?

Có cách nào để nói "[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]"?

Trả lời

18

Có thực sự, có một cách như vậy. Nó giống như sau:

[UIView setAnimationsEnabled:NO]; 
// Animations happen here 
[UIView setAnimationsEnabled:YES]; 

... điều này sẽ vô hiệu hóa cả hoạt ảnh UIView được kích hoạt thông qua các khối và hoạt ảnh được kích hoạt bằng phương pháp bắt đầu/kết thúc cũ.

Điều đó nói rằng, tôi giả sử thư viện của bên thứ ba được biên dịch trước nếu không bạn có thể sửa đổi nguồn trực tiếp: tất nhiên là nó có thể làm điều gì đó kỳ lạ và hoạt ảnh theo cách khác, vì vậy số dặm của bạn có thể thay đổi theo giải pháp này .

Điều này sẽ không tắt các thay đổi được thực hiện trong khối hoạt ảnh: chúng sẽ đơn giản xảy ra ngay lập tức. Nếu không, bạn sẽ mạo hiểm những điều xấu xảy ra vì API bên thứ ba của bạn sẽ đưa ra giả định về nơi mà lượt xem có thể không đúng.

3

Dành cho iOS 7 trở lên, có số này là +performWithoutAnimation: của UIView.

Lưu ý rằng performWithoutAnimation hữu ích cho việc thực hiện thay đổi ngay lập tức trong khi bạn đang ở trong khối hoạt ảnh, nhưng nó sẽ không tắt các cuộc gọi hoạt hình được thực hiện trong khối lồng nhau, vì vậy hãy sử dụng nó để thuận tiện, nhưng không mạnh bằng setAnimationsEnabled câu trả lời gốc.

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