2017-12-01 10 views
0

私のアプリケーションのrootViewControllerとしてUITabBarControllerがあります。ダウンロードが開始されたとき、私は私の最後のタブにバッジを表示し、それはダウンロードが起こっていることを示すために色をパルス持っている:別のUIViewControllerまで別のUIViewControllerが表示されたときにUIViewアニメーションが一時停止する

- (void)incrementBadgeValue { 

    UITabBarItem *moreTabBarItem = [self.tabBar.items lastObject]; 
    moreTabBarItem.badgeValue = @"↓"; 

    self.originalColor = moreTabBarItem.badgeColor.copy; 
    UIColor *toColor = [UIColor darkGrayColor]; 
    NSTimeInterval duration = 1.5f; 

    [UIView animateWithDuration:duration 
          delay:0.0 
         options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 

         moreTabBarItem.badgeColor = toColor; 

        } completion:^(BOOL finished) { 
         if (finished) { 
          moreTabBarItem.badgeColor = self.originalColor; 
         } 
        }]; 

} 

これは、素晴らしい作品は、ウィンドウの上に提示され、またはユーザーの葉アプリに戻ります。このような場合、アニメーションは一時停止/停止されます。

どうすればこのアニメーションを続けることができますか?

答えて

0

私は同じ問題があります。それを

  • を解決するには、アプリ
  • 上書きするために別のUIViewControllerは、ウィンドウの上に提示されたときにアニメーションを停止するオーバーライドviewWillAppear方法、またはユーザーの葉とリターンUITabBarControllerのサブクラス(名前CustomTabBarController
  • を作成viewDidDisappear必要に応じてアニメーションをチェックして継続するメソッド。
  • アニメーションコードをCustomTabBarControllerの内側に配置できない場合。 delegateを作成し、コントローラクラス

CustomTabBarControllerにそれを使用

@protocol CustomTabBarDelegate<NSObject> 

- (void)tabBarWillAppear; 
- (void)tabBarDidDisappear; 

@end 

@interface CustomTabBarController : UITabBarController 

@property(nonatomic, weak) id<CustomTabBarDelegate> customDelegate; 

@end 

@implementation CustomTabBarController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.customDelegate tabBarWillAppear]; 
} 

- (void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 

    [self.customDelegate tabBarDidDisappear]; 
} 

@end 

YourViewController

@interface YourViewController() <CustomTabBarDelegate> 

@end 

@implementation YourViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [(CustomTabBarController*)self.tabBarController setCustomDelegate:self]; 
} 

- (void)tabBarWillAppear { 
    if (/*Still need animation*/) { 
    [self incrementBadgeValue]; 
    } 
} 

- (void)tabBarDidDisappear { 
    // Remove your animation 
} 

@end 
関連する問題