iphone – UIView动画与自动逆转

iphone – UIView动画与自动逆转,第1张

概述我有一个问题与设置UIViewAnimationOptionAutoReverse。 这里是我的代码。 CALayer *aniLayer = act.viewToChange.layer;[UIView animateWithDuration:2.0 delay:1.0 options:(UIViewAnimationCurveLinear | UIViewAnimationOptionAut 我有一个问题与设置UIVIEwAnimationoptionautoReverse。
这里是我的代码。

CALayer *aniLayer = act.vIEwtochange.layer;[UIVIEw animateWithDuration:2.0 delay:1.0 options:(UIVIEwAnimationCurvelinear | UIVIEwAnimationoptionautoreverse) animations:^{                    vIEwToAnimate.frame = GCRectMake(1,1,100,100);                    [aniLayer setValue:[NSNumber numberWithfloat:degreesToradians(34)] forKeyPath:@"transform.rotation"];                } completion:nil ];

问题是在动画颠倒之后,UIVIEw跳回到动画块中设置的帧。我想让UIVIEw成长和“ungrow”,停在它的原始位置。

是有没有编程2连续动画的解决方案。

谢谢!

解决方法 您有三个选项。

当您使用 – [UIVIEw animateWithDuration:…]方法时,您在动画块中所做的更改会立即应用于相关视图。但是,还有一个应用于视图的隐式CAAnimation,从旧值动态到新值。当CAAnimation在视图上处于活动状态时,它会更改显示的视图,但不会更改视图的实际属性。

例如,如果您这样做:

NSLog(@"old center: %@",NsstringFromCGPoint(someVIEw.center));[UIVIEw animateWithDuration:2.0 animations: ^{ someVIEw.center = newPoint; }];NSLog(@"new center: %@",NsstringFromCGPoint(someVIEw.center));

你会看到“旧中心”和“新中心”是不同的;新中心将立即反映newPoint的值。但是,隐式创建的CAAnimation将导致视图仍显示在旧中心,并平滑地移动到新中心。当动画完成后,它将从视图中删除,并切换回刚才看到的实际模型值。

当传递UIVIEwAnimationoptionautoreverse时,它会影响隐式创建的CAAnimation,但不会影响对值的实际更改。也就是说,如果我们的示例上面定义了UIVIEwAnimationoptionautoreverse,那么隐式创建的CAAnimation将从oldCenter动画到newCenter并返回。然后动画将被删除,我们将切换回查看我们设置的值…这仍然在新的位置。

正如我所说,有三种方法来处理这个。第一个是在动画上添加一个完成块来反转它,像这样:

第一个选项

CGPoint oldCenter = someVIEw.center;[UIVIEw animateWithDuration:2.0                 animations: ^{ someVIEw.center = newPoint; }                 completion:    ^(BOol finished) {       [UIVIEw animateWithDuration:2.0                        animations:^{ someVIEw.center = oldCenter; }];   }];

第二选择

第二个选项是像你一样自动反转动画,并将视图设置为完成块中的原始位置:

CGPoint oldCenter = someVIEw.center;[UIVIEw animateWithDuration:2.0                      delay:0                    options: UIVIEwAnimationoptionautoreverse                 animations: ^{ someVIEw.center = newPoint; }                 completion: ^(BOol finished) { someVIEw.center = oldCenter; }];

但是,这可能会导致动画自动反转完成时间和完成块运行时间之间闪烁,因此它可能不是您的最佳选择。

第三个选项

最后一个选项是直接创建CAAnimation。当你实际上不想更改要更改的属性的最终值时,这通常更简单。

#import <QuartzCore/QuartzCore.h>CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];animation.autoreverses = YES;animation.repeatCount = 1; // Play it just once,and then reverse itanimation.tovalue = [NSValue valueWithCGPoint:newPoint];[someVIEw.layer addAnimation:animation forKey:nil];

注意,CAAnimation的做事方式决不会改变视图的实际值;它只是用动画掩蔽实际值。视图仍然认为它在原始位置。 (这意味着,例如,如果你的视图响应触摸事件,它仍然会观察那些触摸事件发生在原始位置。动画只改变视图绘制的方式;没有别的。

CAAnimation方式还需要将它添加到视图的基础CALayer。如果这会吓唬你,请随意使用 – [UIVIEw animateWithDuration:…]方法。使用CAAnimation有额外的功能,但如果它是你不熟悉的东西,链接UIVIEw动画或在完成块中重置它是完全可以接受的。事实上,这是完成块的主要目的之一。

所以,你去。颠倒动画和保持原始值的三种不同方式。请享用!

总结

以上是内存溢出为你收集整理的iphone – UIView动画与自动逆转全部内容,希望文章能够帮你解决iphone – UIView动画与自动逆转所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1087432.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存