1

我在下面有这个代码,它把我的 UIView 移到了左边:

- (void)viewDidLoad {
    [super viewDidLoad];

    [UIView beginAnimations:nil context:NULL];

        [UIView setAnimationDuration:4];

        int xOriginal = 91;

        CGRect rect = imagem.frame;

        int x = rect.origin.x;
        int y = rect.origin.y;
        int w = rect.size.width;
        int h = rect.size.height;

        if(x == xOriginal){

            imagem.frame = CGRectMake(x+100, y, w, h);
        }else{

            imagem.frame = CGRectMake(x-100, y, w, h);
        }

        [UIView commitAnimations];

}

我的视图坐标是 x = 91(超级视图的中心),当我启动我的应用程序时,我的 UIView 从左开始并转到中心,而不是中心并向右,为什么会这样?

如何让我的 UIView 从中心 (x=91) 开始并向右 (91+100),而不是从左到中心?

4

4 回答 4

2
[UIImageView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveLinear  animations:^{
                imagem.frame=CGRectMake(imagem.frame.origin.x+100, imagem.frame.origin.y, imagem.frame.size.width, imagem.frame.size.height);

   } completion:^(BOOL finished) {
                //code for completion
                NSLog(@"Animation complete");
            }];
于 2014-12-19T11:06:00.797 回答
1
Initially image.frame = CGRectMake(91,100,20,20);
So imageview starting point is 0

[UIView animateWithDuration:5.0
  animations:^{
    //Animation code goes here
   image.frame = CGRectMake(191,100,20,20); //Now imageview moves from 0 to 100
  } completion:^(BOOL finished) {
    //Code to run once the animation is completed goes here
}];
于 2014-12-19T10:59:10.247 回答
1

自动布局和帧动画不是好朋友。尝试为约束设置动画,而不是直接为框架设置动画。

您可以创建约束的出口,并constant在代码中设置约束的属性以移动视图。您还可以在动画块中
调用以刷新约束。-[view layoutIfNeeded]

否则,您可以删除所有视图约束并无所畏惧地为其框架设置动画。

于 2014-12-19T11:09:47.470 回答
1

正如另一张海报所说,您无法在使用 AutoLayout 的 XIB/故事板中为视图的框架设置动画。

相反,您必须为附加到视图的约束设置动画。

您所做的是创建一个约束(或多个约束)并将其连接到 IBOutlet。然后,在您的动画代码中,您计算​​约束的更改并更改适当约束的常量。

例如,如果您想移动视图的垂直位置,请设置一个约束来设置视图的垂直位置,并将其链接到名为 viewConstraint 的 IBOutlet。然后你会使用这样的代码:

[myView animateWithDuration: .25
  animations: ^
  {
    viewConstraint.constant -= shiftAmount;
    [self.view layoutIfNeeded];
  }
];
于 2014-12-19T19:36:14.737 回答