IOS在动画完成后停止UI按钮以占据自己的位置

时间:2015-09-30 12:51:49

标签: ios objective-c uibutton uianimation

我已设置动画,如下图所示。 UI按钮从左向右然后从上到下移动。动画正常工作但动画完成后UIButton在segue执行之前就到了原来的位置。所以,它看起来并不好看。我想设定完成动画后UIButton无法在segue之前来到它自己的位置。

这是我尝试使用Image。

   //Move button Left to Right
- (IBAction)btnEasy:(id)sender {
Easy=YES;
NSLog(@"your x is: %f ", self.btnEasy.frame.origin.x);
NSLog(@"your y is: %f ", self.btnEasy.frame.origin.y);

x1=self.btnEasy.frame.origin.x;
y1=self.btnEasy.frame.origin.y;

CGRect screenRect = [[UIScreen mainScreen] bounds];
[UIView animateWithDuration:1.150 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
            self.btnEasy.frame = CGRectMake(screenRect.size.width/1.80, self.btnEasy.frame.origin.y, self.btnEasy.frame.size.width, self.btnEasy.frame.size.height);

    [self performSelector:@selector(btneasyanimation) withObject:self afterDelay:1.160 ];}
                      completion:^(BOOL finished) {

                      }];

  //Move Button top to Bottom

    if (Easy==YES) {
        if (isiPad2 || isiPadAir || isiPadRatina) {
          //[self.view layoutIfNeeded];
                [UIView beginAnimations:nil context:NULL];
                [UIView setAnimationBeginsFromCurrentState:YES];
                [UIView setAnimationDuration:1.0];
                [_btnEasy setFrame:CGRectMake(self.view.frame.origin.x+290, self.view.frame.origin.y+900, self.btnEasy.frame.size.width, self.btnEasy.frame.size.height)];
                [UIView commitAnimations];


        }
     else   if (isiPhone4s) {

            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationBeginsFromCurrentState:YES];
            [UIView setAnimationDuration:1.0];
            [_btnEasy setFrame:CGRectMake(self.view.frame.origin.x+92, self.view.frame.origin.y+428, self.btnEasy.frame.size.width, self.btnEasy.frame.size.height)];
            [UIView commitAnimations];


        }
    }
  [self performSelector:@selector(segueeMethod) withObject:self afterDelay:1.160 ];

图片: -

enter image description here

2 个答案:

答案 0 :(得分:0)

如果您没有直接放置给定框架的按钮,那么使用自动布局(自动调整将以相同的效果结束)。您需要显式使用autolayout,保留对约束的引用并更新它们(您可以在此处搜索如何执行此操作),然后设置UIView动画块[button layoutIfNeeded]

您可以在this answer

中查看有关该答案的详细答案

答案 1 :(得分:0)

有一种简单快捷的方法可以与您当前的实施方式配合使用。如果您在动画完成后确切知道视图的位置,则可以执行以下操作:

UIView animateWithDuration:中的

...在完成块中指定视图的最终变换(位置和方向),即:

completion:^(BOOL finished) {
// Assign views transform and appearance here, for when the animation completes
}

希望有所帮助。