呈现另一个 UIViewController 时 UIView 动画暂停
Posted
技术标签:
【中文标题】呈现另一个 UIViewController 时 UIView 动画暂停【英文标题】:UIView animation getting paused when another UIViewController is presented 【发布时间】:2017-12-01 20:05:42 【问题描述】:我有一个 UITabBarController
作为我的应用程序的 rootViewController。当开始下载时,我会在最后一个标签上显示一个徽章,并让它以脉冲颜色显示正在下载:
- (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;
];
这很好用,直到另一个UIViewController
出现在窗口上,或者用户离开并返回应用程序。在这些情况下,动画会暂停/停止。
在这种情况下我该如何继续这个动画?
【问题讨论】:
【参考方案1】:我也有同样的问题。解决它
创建UITabBarController
(名称CustomTabBarController
)的子类
重写 viewWillAppear
方法以在另一个 UIViewController 出现在窗口上或用户离开并返回应用程序时停止动画
重写 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
【讨论】:
以上是关于呈现另一个 UIViewController 时 UIView 动画暂停的主要内容,如果未能解决你的问题,请参考以下文章
从另一个 UIViewController 中呈现一个 UIViewController?
如何在将 UIViewController 呈现给自定义时更改默认转换
UIViewController 由于另一个最近被解雇而没有被呈现
从另一个 ViewController 呈现故事板 ViewController