2013-02-18 3 views
2

Я работаю на шатровым текста в ИО с использованием анимации, как показано ниже:UIView анимация добавляет ускорение во время анимации

Первый способ:

-(void)startScrolling { 
     CGRect rect ; 
     rect     = self.titleView.frame; 
     rect.origin.x   = -self.titleView.frame.size.width; 
     self.titleView.frame = rect; 
     [UIView beginAnimations:@"" context:nil]; 
     [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
     [UIView setAnimationDuration:13]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(startScrolling)]; 

     // Update end position 
     CGRect rect ; 
     rect     = self.titleView.frame; 
     rect.origin.x   = [[UIScreen mainScreen] bounds].size.width; 
     self.titleView.frame = rect; 
     [UIView commitAnimations]; 

} 

Второй путь:

 [UIView animateWithDuration:13 
          delay:0 
          options:UIViewAnimationOptionCurveLinear 
         animations:^{ 
          CGRect rect ; 
          rect     = self.titleView.frame; 
          rect.origin.x   = -self.titleView.frame.size.width; 
          self.titleView.frame = rect; 

       } 
         completion:^(BOOL finished) { 
          CGRect rect ; 
          rect     = self.titleView.frame; 
          rect.origin.x   = [[UIScreen mainScreen] bounds].size.width; 
         self.titleView.frame = rect; 
         [self startScrolling]; 
       } 
]; 

первый способ работает правильно. и проблема во втором случае заключается в том, что при анимации добавляется ускорение. Не получайте это

Почему ускорение добавляется при использовании блока. Поиск через Интернет, но я все еще застрял. Есть идеи по этому вопросу?

ответ

2

Два образца кода, которые вы опубликовали, не являются эквивалентными; ваш код установки должен произойти до блока анимации, а ваш код «конечного состояния», который фактически вызывает анимацию, должен находиться в блоке «анимации». Эквивалентным блоком для вашего первого образца будет:

 CGRect rect ; 
     rect     = self.titleView.frame; 
     rect.origin.x   = -self.titleView.frame.size.width; 
     self.titleView.frame = rect; 

     [UIView animateWithDuration:13 
          delay:0 
          options:UIViewAnimationOptionCurveLinear 
         animations:^{ 
          CGRect rect ; 
          rect     = self.titleView.frame; 
          rect.origin.x   = [[UIScreen mainScreen] bounds].size.width; 
         self.titleView.frame = rect; 
       } 
         completion:^(BOOL finished) { 
         [self startScrolling]; 
       } 
]; 

Помогло ли это?

+0

Я испортил коды. Спасибо, что указали это – tranvutuan

Смежные вопросы