2011-09-06 42 views
6

期间发送scrollViewDidScroll消息当用户手动滚动通过我的UIScrollView,我委托的scrollViewDidScroll方法获取动画期间多次呼吁,与contentOffset的新更新的值。 当我调用“[scrollView setContentOffset:320 animated:YES”,那么委托方法就会以相同的方式被调用。 我认为正常的滚动速度对于用户体验来说太快了,所以在“animatedWithDuration:”块中包含了一个“[scrollView setContentOffset:320]”,正如Apple在UIView类的引用中所建议的那样。如何使UIScrollView的动画

但是......现在我的scrollViewDidScroll方法得到在与最终值的开头动画调用一次,而不是动画中了。当我使用旧的“beginAnimations:”方法时,我会得到相同的效果。

所以......任何人都知道如何解决这个问题?

顺便说一句,UIScrollView的“setContentOffset”方法显示相同的行为。它曾经在动画过程中被调用,现在只被调用一次。

回答

6

感谢Fichek的暗示,我已经得到了这个工作。就像Fichek说的那样,在动画过程中你不会收到任何改变属性的通知。所以诀窍是,要确保取决于已更改属性的任何内容也同时生成动画。您需要在原始属性的相同块中设置其动画。 如果然后设置动画的“UIViewAnimationOptionAllowUserInteraction”,那么相同的属性仍然可以工作的任何正在进行的用户互动 - 而出奇地好,我不得不说。

对于我的具体情况 - 要保持拖视图固定,而滚动的UIScrollView下面 - 这里是如何设置我的动画:

[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

这更是一个解决办法。我通知委托人scrollViewDidScroll中的滚动更改:这是使用此方法无法实现的。类似的问题发布在这里:http://stackoverflow.com/questions/21749950/how-to-properly-animate-uiscrollview-contentoffset – Vlad