2013-05-08 34 views
0

我有一個UIView作爲我的應用程序中的徽章,按下按鈕後,徽章應該閃爍存在,然後做一個不錯的壁球和拉伸動畫。該動畫在iPhone 4,iPhone 4s和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; 
     } 
    } 
} 

回答