2012-05-02 31 views
15

Tôi chưa bao giờ đưa ra bất cứ nghĩ đến trở BOOL finished của một handler hoàn UIView hoạt hình, nhưng đọc một số mẫu mã trong Hướng dẫn lập trình của Apple UIView thấy điều này:Có cần thử nghiệm BOOL trong trình xử lý hoàn thành cho hoạt ảnh UIView không?

completion:^(BOOL finished) { 
if (finished) { 

là cần thiết này? Khối hoàn thành không nên chạy trừ khi hoạt ảnh đã kết thúc, đúng không? Kiểm tra có vẻ dư thừa.

Trả lời

7

Hành động thực tế đang được thực hiện trong đoạn mã đó là khá đáng kể. Hoạt ảnh đang chuyển từ chế độ xem này sang chế độ xem khác - lần đầu tiên được thay thế và sau đó một boolean được đặt để theo dõi xem hiện tượng nào được hiển thị. Boolean được đặt trong khối hoàn thành.

[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView) 
    toView:(displayingPrimary ? secondaryView : primaryView) 
    duration:1.0 
    options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight : 
       UIViewAnimationOptionTransitionFlipFromLeft) 
    completion:^(BOOL finished) { 
     if (finished) { 
      displayingPrimary = !displayingPrimary; 
     } 
}]; 

Trong trường hợp này, nếu các hình ảnh động (vì lý do gì) không hoàn chỉnh, sau đó các quan điểm vẫn chưa được trao đổi, và bạn hoàn toàn không muốn lật giá trị của displayingPrimary, bởi vì bạn' sau đó sẽ có một bản ghi không chính xác về tình trạng của bạn. Đó là lý do tại sao cờ finished được chọn trong trường hợp này.

Lưu ý rằng trong hầu hết (nếu không phải tất cả) các mẫu mã khác trong hướng dẫn đó, cờ không được chọn - đó là vì nó không quan trọng trong những trường hợp đó (chạy một hoạt ảnh khác sau lần đầu tiên, ví dụ hoặc thay đổi một số giá trị mà không phụ thuộc vào việc hoàn tất thành công hoạt ảnh).

+2

để âm thanh như một khối hoàn thành có thể thực sự chạy ngay cả khi bool kết thúc bằng không. tại sao điều đó lại xảy ra? vì nó là một khối "hoàn thành", nó sẽ không chạy nếu khối trước đã thực sự hoàn thành? – johnbakers

+1

Bắt đầu một hình ảnh động mới với một trong những phương pháp đó, có một tùy chọn để có một hình mới làm gián đoạn đầu tiên. Ngoài ra còn có một tùy chọn cho phép tương tác người dùng với chế độ xem, có thể là cơ hội để hủy hoạt ảnh. –

+0

Theo doc transitionFromView thêm toView tại BEGINNING của hoạt ảnh và lấy từ View out of superView tại END của hoạt ảnh. Điều đó có nghĩa là nếu kết thúc là sai hơn BOTH fromView và toView vẫn còn đó? Bởi vì trong trường hợp của tôi, tôi đã thấy những trường hợp cả hai đều biến mất. –

3

Có bạn thực sự nên tôn trọng bool đó trong trình xử lý của bạn. Người dùng có thể bắt đầu hoạt ảnh, nhưng trước khi hoạt ảnh đó hoàn tất bình thường, người dùng sẽ làm một việc khác để hủy hoạt ảnh sớm. Bool này cũng cho bạn biết về các trường hợp như vậy.

- cập nhật - Chỉ cần xây dựng. Hãy tưởng tượng một số hoạt ảnh di chuyển một chế độ xem trên màn hình. Trình xử lý có thể kích hoạt khi xem xong việc di chuyển. Giả sử người dùng chạm vào một nơi khác để tạo ra một hoạt ảnh mới về cơ bản hủy bỏ lần hiển thị đầu tiên này. Bạn có thể sử dụng bool được cung cấp để phát hiện điều đó.

+0

Bạn có cho rằng ngay cả khi hoạt ảnh bị hủy, trình xử lý hoàn tất vẫn có thể chạy? – johnbakers

+0

Hy vọng rằng ai đó sẽ kêu vang trong những người tự tin hơn tôi về điều này, nhưng có, tôi nghĩ rằng đó là trường hợp. Không bị hủy trước khi nó chạy, nhưng bị gián đoạn trước khi nó có thể hoàn thành. –

+0

Khối hoàn thành chỉ có ý nghĩa và bạn nên xác nhận và sử dụng nó chỉ khi bạn cần thực hiện điều gì đó cụ thể sau khi hoạt ảnh hoàn tất thành công. Nếu bạn không quan tâm điều gì xảy ra với hoạt ảnh, thì không có điểm nào xác thực nếu hoạt ảnh hoàn tất thành công ... – Lefteris

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