objective-c - 如何在设置动画时更改 UIView block 动画的速度(或持续时间)?

标签 objective-c ios cocoa core-animation

我有一个 ImageView ,我在屏幕上非常缓慢地设置动画,重复使用 block 动画,如下所示:

[UIView animateWithDuration:100.0f
                      delay:0.0f
                    options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat
                 animations:^(void) {
                     pattern.frame = CGRectMake(0-(pattern.frame.size.width/2), 0, pattern.frame.size.width, pattern.frame.size.height);
                 }
                 completion:NULL];

基本上图像是屏幕宽度的两倍,当它重复时,它看起来就像在不断地循环。

一切正常,但我想做的是根据旋转触摸手势加快或减慢滚动速度。我设置了手势识别器等,但我可以更改当前动画以加快速度吗?

如果没有,我可以取消当前正在运行的动画并用另一个持续时间更短/更长的动画替换它吗?

顺便说一句,我试过在我的手势识别器中使用完全相同的动画 block ,比如:

-(void)rotatedSpinner:(UIRotationGestureRecognizer *)gestureRecognizer{
    CGFloat rotation = gestureRecognizer.rotation;

    [UIView animateWithDuration:100-(rotation*10)
             delay:0.0f
             options:UIViewAnimationOptionBeginFromCurrentState
             animations:^(void) {
                 pattern.frame = CGRectMake(0-(pattern.frame.size.width/2), 0, pattern.frame.size.width, pattern.frame.size.height);
             }
             completion:NULL];
}

..但它似乎根本没有做任何事情? 任何帮助表示赞赏。

最佳答案

如果你想要一个缓慢滚动的 View ,用户也可以用他的手指滚动,我建议使用 UIScrollView。您可以使用 NSTimer 来持续更新 ScrollView 的内容偏移量。当用户开始滚动时,您只需停用此计时器,让他随心所欲地滚动。一旦他放手并且 ScrollView 停止减速(您的委托(delegate)人将收到通知),您就可以再次开始自己移动它。

关于objective-c - 如何在设置动画时更改 UIView block 动画的速度(或持续时间)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335120/

相关文章:

objective-c - Objective C - 类别和继承 - 将方法添加到基类并将覆盖添加到派生类

iPhone 键盘、完成按钮和 resignFirstResponder

ios - 如何让 GPS 应用程序在后台不间断地运行

objective-c - 释放使用 initWithInteger : vs. numberWithInt 创建的 NSNumber 实例:

ios - 如何将 iOS 设备 token 字符串转换回 NSData

ios - __NSCFDictionary stringByDeletingPathExtension 崩溃

ios - UINaviationItem 中的 UIToolbar 顶部有奇怪的行

objective-c - 使用 segue 将数据传递到另一个 Detail TableViewController 的问题

cocoa - 自定义 NSMenu 之类的 View 未正确显示 selectedMenuItemColor

swift - 为什么我可以为 NSWindowController 的子类调用一个无参数的 init()?