自定义UIScrollView动画

3
我正在使用一个UIScrollView,其中包含一系列按钮,看起来很像UIPickerView。我刚刚实现了抖动以混洗的功能,在检测到抖动后,我通过以下方式将UIScrollView的内容偏移设置为randomShuffle的位置。
[Singlescroll setContentOffset:CGPointMake(jumpX, jumpY+randShuffle*sepValue) animated:YES];

而不仅仅是将内容偏移量移动到与按钮匹配的随机位置,我想实现一种洗牌动画,其中视图几乎像老虎机一样“旋转”,然后停在randomShuffle按钮位置。
我尝试通过简单地将偏移量动画化到UIScrollView的顶部,然后再返回到randomShuffle位置(一个接一个),但这并没有起作用,它直接转到了randomShuffle位置。我意识到我没有使用计时器尝试过这个操作,所以动画没有延迟,但如果可能,我希望避免运行计时器。
有没有内置动画可以处理这个问题?如果没有,请问在使用计时器之前我应该如何解决这个问题?谢谢。

UIScrollView是否有任何内置的动画效果? - Wez
1个回答

5

不要只使用animated:YES,你试过将它放入类似以下代码中吗:

[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    [Singlescroll setContentOffset:maximumOffsetPoint]; //spin all the way up?
}completion:^(BOOL finished){
    if (finished)
        //kick off another animation, to spin it back down:
        [UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
            [Singlescroll setContentOffset:CGPointMake(jumpX, jumpY+randShuffle*sepValue)];
        }completion:nil];
    }
}];

我不知道这是否解答了您的问题,但完成块非常方便,可能是您需要的。在完成块中,第二个动画将仅在第一个动画结束时调用。
此外,在UIView上有几种“animateWithDuration:”方法,但我个人经验中,该方法更可靠地用于滚动视图的contentOffset和zoomToRect等属性的动画。

谢谢,这对我有用。如果您正在重复使用视图,则完全不需要设置选项。 - Vilém Kurz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接