- (void)viewDidLoad {
[super viewDidLoad];
[self pingSplash];
UIViewController *next = [[self storyboard] instantiateViewControllerWithIdentifier:@"ViewController"];
[self.navigationController pushViewController:next animated:YES];
}
我的意思是完成pinSplash然后pushViewController,但它直接转到ViewController页面,即使没有完成pingSplash,有什么好办法做这种工作?
对于pingSplash部分:
- (void) pingSplash
{
SKSplashIcon *pingSplashIcon = [[SKSplashIcon alloc] initWithImage:[UIImage imageNamed:@"ping.png"] animationType:SKIconAnimationTypePing];
_splashView = [[SKSplashView alloc] initWithSplashIcon:pingSplashIcon backgroundColor:[UIColor grayColor] animationType:SKSplashAnimationTypeBounce];
_splashView.animationDuration = 5.0f;
[self.view addSubview:_splashView];
[_splashView startAnimation];
}
答案 0 :(得分:0)
pingSplash
方法在启动动画时立即返回,这就是为什么你最终过早推动视图控制器的原因。
有几种方法可以解决这个问题。一种方法是将块传递给在适当延迟后运行的pingSplash
方法。
这是一种方式:
更新pingSplash
方法以获取在5秒延迟后运行的完成处理程序块。
- (void) pingSplash:(void (^)(void))completion
{
SKSplashIcon *pingSplashIcon = [[SKSplashIcon alloc] initWithImage:[UIImage imageNamed:@"ping.png"] animationType:SKIconAnimationTypePing];
_splashView = [[SKSplashView alloc] initWithSplashIcon:pingSplashIcon backgroundColor:[UIColor grayColor] animationType:SKSplashAnimationTypeBounce];
_splashView.animationDuration = 5.0f;
[self.view addSubview:_splashView];
[_splashView startAnimation];
if (completion) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_splashView.animationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
completion();
});
}
}
然后更新您的viewDidLoad
:
- (void)viewDidLoad {
[super viewDidLoad];
[self pingSplash:^{
UIViewController *next = [[self storyboard] instantiateViewControllerWithIdentifier:@"ViewController"];
[self.navigationController pushViewController:next animated:YES];
}];
}