IOS останавливает кнопку пользовательского интерфейса, чтобы она занимала свое место после завершения анимации

Я установил анимацию, как показано на изображении ниже. В котором UIbutton перемещается слева направо, а затем сверху вниз. Анимация работает правильно, но после завершения анимации UIButton возвращается на исходное место до выполнения перехода. так, это не выглядит хорошо. Я хочу установить, что после завершения анимации UIButton не может вернуться на свое место до перехода.

Вот моя попытка с 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 ];

Изображение :-

введите здесь описание изображения


person Badal Shah    schedule 30.09.2015    source источник
comment
Вы размещаете кнопку с помощью Autolayout? в этом случае, если вы переместите кадр, кнопка переместится в предыдущее место после завершения анимации.   -  person Pablo Carrillo Alvarez    schedule 30.09.2015
comment
да. у меня есть две раскадровки для ipad и iphone. в iphone я использовал autoresize и в ipad я использовал autolayout. но в обеих раскадровках одна и та же проблема.   -  person Badal Shah    schedule 30.09.2015


Ответы (2)


Если вы не размещаете непосредственно кнопку, заданную ей рамкой, таким образом, используя авторазметку (автоматическое изменение размера закончится с тем же эффектом). Вам нужно явно использовать автомакет, сохранить ссылку на ваши ограничения и обновить их (вы можете найти здесь, как это сделать), а затем установить UIView блок анимации [button layoutIfNeeded]

Вы можете увидеть подробный ответ об этом в этом ответе

person Pablo Carrillo Alvarez    schedule 30.09.2015

Существует простой и быстрый способ, который будет работать с вашей текущей реализацией. Если вы точно знаете, где вы хотите, чтобы вид был после завершения анимации, вы можете сделать следующее:

в UIView animateWithDuration:... назначьте окончательное преобразование (положение и ориентацию) вида в блоке завершения, т.е.:

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

Надеюсь, это поможет.

person bilo-io    schedule 30.09.2015