2013-05-08 2 views
0

У меня есть UIView, который действует как значок в моем приложении, после нажатия кнопки значок должен мигать, а затем делать приятную сквош и растягивать анимацию. Анимация отлично работает на iPhone 4, iPhone 4 и iPhone 5, но 8GB iPod touch (4-го поколения) iOS 5.1.1 имеет очень плохое заикание.iPod Touch iOS 5 Анимация Заикание

Метод popWithDuration: вызывает заикание при использовании метода resetCount, заставляет вид взорваться по размеру. Интересно, знают ли кто-нибудь какие-либо исправления или обходные пути.

Вот соответствующие методы, класс является подклассом UIView.

- (void)popWithDuration:(CGFloat)duration 
{ 
    if(self.canAnimateLikedNumber) 
    { 
     if(self.waitingToReset){ 
      [self resetCount]; 
      return; 
     } 
     else 
      self.canAnimateLikedNumber = FALSE; 

     CGAffineTransform stretchTransform = CGAffineTransformMakeScale(1.5,1.5); 
     CGAffineTransform squashTransform = CGAffineTransformMakeScale(1.0,1.0); 

     [UIView animateWithDuration:duration delay:0.0f options:UIViewAnimationOptionLayoutSubviews animations:^{ 
      [self setAlpha:1.0f]; 
      [self setTransform:stretchTransform]; 
     } completion:^(BOOL finished) { 
      [UIView animateWithDuration:0.2f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
       [self setTransform:squashTransform]; 
      } completion:^(BOOL finished) { 
       self.canAnimateLikedNumber = TRUE; 
       if(self.waitingToReset){ 
        [self resetCount]; 
        return; 
       } 
      }]; 
     }]; 
    } 

} 

- (void) resetCount 
{ 
    if([NSString isValid: self.savedCountLabel.text] || (!self.hidden && self.superview)) 
    { 
     if(self.canAnimateLikedNumber) 
     { 
      self.canAnimateLikedNumber = FALSE; 

      CGSize defaultSize = [NotificationBadge DefaultBadgeSize]; 

      CGRect originalRect = CGRectMake(self.frame.origin.x, self.frame.origin.y, defaultSize.width, defaultSize.height); 
      [UIView animateWithDuration:0.2 delay:0.0f options:UIViewAnimationOptionLayoutSubviews animations:^{ //squash and stretch 
       [self setTransform:CGAffineTransformMakeScale(2, 2)]; 
      } 
      completion:^(BOOL finished) 
      { 
       [UIView animateWithDuration:0.4 delay:0.0f options:UIViewAnimationOptionLayoutSubviews animations:^{ 
        [self setTransform:CGAffineTransformMakeScale(0.0,0.0)]; 
        [self setAlpha:0.0f]; 
       } 
       completion:^(BOOL finished) 
       { 
        [self setHidden:TRUE]; 
        [self setTransform:CGAffineTransformMakeScale(1.0,1.0)]; 

        [self setFrame:originalRect]; 
        [self.savedCountLabel setText:@"0"]; 
        [self.savedCountLabel setFrame:CGRectMake(NOTIFICATION_LABEL_INSETS.left, NOTIFICATION_LABEL_INSETS.top, defaultSize.width - NOTIFICATION_LABEL_INSETS.left - NOTIFICATION_LABEL_INSETS.right, defaultSize.height - NOTIFICATION_LABEL_INSETS.top - NOTIFICATION_LABEL_INSETS.bottom)]; 

        self.canAnimateLikedNumber = TRUE; 
        self.waitingToReset = FALSE; 

       }]; 
      }]; 
     } 
     else 
     { 
      self.waitingToReset = TRUE; 
     } 
    } 
} 

ответ

0

Понял. Очевидно, если вы используете свойство transform в iOS 5.0+, вы не можете установить значение преобразования в 0.0f когда-либо. KG

Кредиты animation working in iOS6, buggy in iOS5

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