2015-09-30 2 views
0

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

Вот моя попытка с изображением.

//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

+0

Вы размещаете кнопку с автозапуском? если это так, если вы перемещаете рамку, после завершения анимации кнопка переходит в предыдущее место. –

+0

да. У меня есть две раскадровки для ipad и iphone. в iphone я использовал autoresize, и в ipad я использовал автозапуск. но в обоих раскадровках есть такая же проблема. –

ответ

0

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

UIView анимации Вы можете увидеть подробный ответ об этом в this answer

0

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

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

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

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