首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CABasicAnimation位置。Y

CABasicAnimation位置。Y
EN

Stack Overflow用户
提问于 2012-10-15 20:03:16
回答 2查看 11.2K关注 0票数 1

我只想用这个函数来动画我的UIButton的位置:

代码语言:javascript
复制
CABasicAnimation *moveUp;
    moveUp          = [CABasicAnimation animationWithKeyPath:@"position.y"];
    moveUp.fromValue = [NSNumber numberWithFloat:self.retestBTN.frame.origin.y];
    moveUp.toValue  = [NSNumber numberWithFloat:self.retestBTN.frame.origin.y - 50];
    moveUp.duration = 1.0;
    moveUp.removedOnCompletion = NO;
    moveUp.fillMode = kCAFillModeBoth;
    moveUp.delegate = self;
    [[retestBTN layer] addAnimation:moveUp forKey:@"y"];

然后我想稍后用这个函数重新设置它的动画:

代码语言:javascript
复制
CABasicAnimation *moveDown;
moveDown            = [CABasicAnimation animationWithKeyPath:@"position.y"];
moveDown.fromValue  = [NSNumber numberWithFloat:self.retestBTN.frame.origin.y];
moveDown.toValue    = [NSNumber numberWithFloat:self.retestBTN.frame.origin.y + 50];
moveDown.duration   = 1.0;
moveDown.removedOnCompletion = NO;
moveDown.fillMode   = kCAFillModeForwards;
[[retestBTN layer] addAnimation:moveDown forKey:@"y"];

但这不能正常工作,我的UIButton转到了奇怪的位置...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-23 21:50:38

通过使用CAAnimation,您只能为层设置动画。实际上,您不会更改对象的modelLayer,只会更改presentationLayer,因为您只会创建动画,而不会实际更改图层的position属性。这意味着按钮不会实际移动,而只是在屏幕上绘制的位置移动。

如果你的按钮是一个UIButton,那么它仍然会在视图所在的地方接受触摸,而不是在图层所在的地方。使用UIKit可以更轻松地为任何视图设置动画,如下所示:

代码语言:javascript
复制
[UIView animateWithDuration:1.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     CGRect frame = self.retestBTN.frame;
                     frame.origin.y -= 50;
                     self.retestBTN.frame = frame;
                 }
                 completion:^(BOOL finished){
                     //callback code goes here
                 }];
票数 3
EN

Stack Overflow用户

发布于 2012-10-23 21:49:00

您面临的问题是位置与原点不同。

无论如何,您正在制作位置的相对动画,因此如果您跳过toValuefromValue,而使用byValue属性(具有相对更改),将会更容易。您的代码将如下所示:

代码语言:javascript
复制
CABasicAnimation *moveUp;
moveUp          = [CABasicAnimation animationWithKeyPath:@"position.y"];      
moveUp.byValue  = @(-50.0f); // or [NSNumber numberWithFloat:-50.0f] if you really need to
moveUp.duration = 1.0;
moveUp.removedOnCompletion = NO;
moveUp.fillMode = kCAFillModeBoth;
moveUp.delegate = self;
[[retestBTN layer] addAnimation:moveUp forKey:@"y"];

代码语言:javascript
复制
CABasicAnimation *moveDown;
moveDown            = [CABasicAnimation animationWithKeyPath:@"position.y"];
moveDown.byValue    = @(50.0f); // or [NSNumber numberWithFloat:50.0f] if you really need to
moveDown.duration   = 1.0;
moveDown.removedOnCompletion = NO;
moveDown.fillMode   = kCAFillModeForwards;
[[retestBTN layer] addAnimation:moveDown forKey:@"y"];
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12895278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档