移动带有起点的 UIView



我在下面有这段代码,他将我的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(,而不是从左到中心?

[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");
            }];

自动布局和帧动画不是好朋友。尝试对约束进行动画处理,而不是直接对帧进行动画处理。

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

否则,您可以消除所有视图约束并无所畏惧地为其框架添加动画效果。

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
}];

正如另一张海报所说,您无法在使用自动布局的 XIB/情节提要中对视图的框架进行动画处理。

相反,您必须对附加到视图的约束进行动画处理。

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

例如,如果要移动视图的垂直位置,

请设置一个约束来设置视图的垂直位置,并将其链接到名为 viewConstraint 的 IBOutlet。然后,您将使用如下代码:

[myView animateWithDuration: .25
  animations: ^
  {
    viewConstraint.constant -= shiftAmount;
    [self.view layoutIfNeeded];
  }
];

相关内容

  • 没有找到相关文章

最新更新