2011-09-06 47 views
6

Khi người dùng cuộn qua UIScrollView của tôi theo cách thủ công, phương thức scrollViewDidScroll của đại biểu của tôi được gọi lặp đi lặp lại trong suốt hoạt ảnh, với các giá trị mới được cập nhật của contentOffset. Khi tôi gọi "[scrollView setContentOffset: 320 animated: YES", thì phương thức ủy nhiệm sẽ được gọi theo cùng một cách. Tôi quyết định rằng tốc độ cuộn bình thường quá nhanh đối với trải nghiệm người dùng, vì vậy hãy đính kèm "[scrollView setContentOffset: 320]" trong khối "animatedWithDuration:", như Apple đề xuất trong tham chiếu lớp UIView.Làm thế nào để UIScrollView gửi các tin nhắn scrollViewDidScroll trong các hình động

Nhưng ... hiện tại phương thức scrollViewDidScroll của tôi chỉ được gọi một lần ở đầu hoạt ảnh với giá trị cuối cùng và không phải trong hoạt ảnh nữa. Tôi nhận được hiệu ứng tương tự khi tôi sử dụng phương thức "beginAnimations:" cũ.

Vậy ... có ai biết cách giải quyết vấn đề này không?

Nhân tiện, phương thức "setContentOffset" của UIScrollView hiển thị cùng một hành vi. Nó được sử dụng để được gọi trong các hình động, và bây giờ được gọi chỉ một lần.

Trả lời

6

Nhờ gợi ý của Fichek, tôi đã làm việc này. Như Fichek đã nói, bạn không nhận được bất kỳ thông báo nào về các thuộc tính đã thay đổi trong quá trình hoạt ảnh. Vì vậy, các trick là, để đảm bảo rằng bất cứ điều gì mà phụ thuộc vào tài sản thay đổi cũng là hoạt hình cùng một lúc. Bạn cần thiết lập hoạt ảnh của họ trong cùng một khối với thuộc tính ban đầu. Nếu sau đó bạn đặt "UIViewAnimationOptionAllowUserInteraction" trên hoạt ảnh, thì mọi tương tác người dùng đang diễn ra của cùng một thuộc tính sẽ vẫn hoạt động - và đáng ngạc nhiên là tôi phải nói.

Đối với trường hợp cụ thể của tôi - để giữ một cái nhìn tĩnh kéo, trong khi cuộn UIScrollView bên dưới - đây là cách tôi thiết lập hình ảnh động của tôi:

[UIView animateWithDuration:0.5 delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ 
    [theScrollView setContentOffset:offset]; 
    // compute newCenter from the new offset 
    theDraggedView.center = newCenter; 
} completion:^(BOOL finished) {}]; 
+0

Đây là thêm một workaround. Tôi thông báo cho đại biểu của các thay đổi cuộn trong scrollViewDidScroll: không thể đạt được với phương pháp này. Câu hỏi tương tự được đăng tại đây: http://stackoverflow.com/questions/21749950/how-to-properly-animate-uiscrollview-contentoffset – Vlad

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