Objective c 如何更改UIView块动画的速度(或持续时间),同时设置动画?

Objective c 如何更改UIView块动画的速度(或持续时间),同时设置动画?,objective-c,ios,cocoa,core-animation,Objective C,Ios,Cocoa,Core Animation,我有一个图像视图,我正在非常缓慢地在屏幕上制作动画,重复时,使用块动画,如下所示: [UIView animateWithDuration:100.0f delay:0.0f options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat animations:^(void) {

我有一个图像视图,我正在非常缓慢地在屏幕上制作动画,重复时,使用块动画,如下所示:

[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];
基本上,图像的宽度是屏幕宽度的两倍,当它重复时,看起来像是在不断循环

这一切都很好,但我想做的是加快或减慢滚动的基础上旋转触摸手势。我已经设置了手势识别器等,但是我可以改变当前动画以加快速度吗

如果没有,我是否可以取消当前正在运行的动画,并将其替换为另一个持续时间更短/更长的动画

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

-(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];
}
但它似乎什么都没做?
非常感谢您的帮助。

如果您想要一个用户也可以用手指滚动的缓慢滚动视图,我建议您使用UIScrollView。可以使用NSTimer连续更新滚动视图的内容偏移量。当用户开始滚动时,您只需停用此计时器,让他随意滚动即可。一旦他让我们走,滚动视图停止减速(您的代表将收到通知),您可以自己再次开始移动它。

如果您想要一个用户也可以用手指滚动的缓慢滚动视图,我建议使用UIScrollView。可以使用NSTimer连续更新滚动视图的内容偏移量。当用户开始滚动时,您只需停用此计时器,让他随意滚动即可。一旦他让我们走,滚动视图停止减速(将通知您的代表),您可以自己再次开始移动它。

如果您希望旋转手势加快或减慢动画,如转动转盘,请尝试以下操作:

在视图的图层上设置“速度”特性

大多数UIView动画最后都会向视图的层对象添加动画,这样就可以了。大概是这样的:

pattern.layer.speed=.5//将动画速度降低到一半


值为2将完全停止动画。值为2将使其以双倍速度运行。

如果希望旋转手势加快或减慢动画(如转动转盘),请尝试以下操作:

在视图的图层上设置“速度”特性

大多数UIView动画最后都会向视图的层对象添加动画,这样就可以了。大概是这样的:

pattern.layer.speed=.5//将动画速度降低到一半


值为2将完全停止动画。值为2将使其以双倍速度运行。

scrollview可能是一个更好的工具,但我不希望用户能够用手指左右滚动,而是响应旋转手势。这并不是应用程序的一个重要部分,但现在我已经有了它在我的脑海中,我想看到它通过!scrollview可能是一个更好的工具,但我不希望用户仅仅能够用手指左右滚动,而是响应旋转手势。这并不是应用程序的一个重要部分,但现在我已经有了它在我的脑海中,我想看到它通过!嗯,差不多了,但它会将动画重置为开始。不知道有没有办法避免这种情况?真的吗?真奇怪。您可能需要获取层的起始时间,更改速度,然后恢复起始时间,就像启动和停止动画的代码一样(在此处进行搜索,以便冻结和恢复CA动画以获取有关如何执行该操作的信息。)嗯,几乎可以,但它会将动画重置为起始。不知道有没有办法避免这种情况?真的吗?真奇怪。您可能需要获取层的起始时间,更改速度,然后恢复起始时间,就像启动和停止动画的代码一样(在此处搜索以便冻结和恢复CA动画,以获取有关如何执行此操作的信息)