我有一个启动画面我将alpha从100淡化到0.我想要当一个alpha为0时,我应该只返回YESAutorotateToInterfaceOrientation返回YES。我无法使这段代码起作用:
if ( splashView.alpha == 0 )
{
return YES;
} else {
return NO;
}
相反,splashView.alpha始终返回null。有什么想法吗?
答案 0 :(得分:3)
当您将alpha设置为零时,向该视图询问其alpha值将返回零。即使动画没有完成(Core Animation中的modelLayer和presentationLayer之间的区别,如果你想了解发生了什么)。
为了得到你想要的东西应该有用;
- (BOOL)shouldAutorotateToInterfaceOrientation:(...) {
BOOL shouldAutoratate = NO;
if(self.splashViewFaded) {
shouldAutorotate = YES;
}
return shouldAutorotate;
}
然后在你的appDidFinishLaunching
方法中(或任何有意义的地方)做这样的事情;
self.viewController.splashViewFaded = NO;
[UIView animateWithDuration:0.25 // or whatever
delay:0.0 // or whatever
options:UIViewAnimationOptionCurveEaseInOut
animations:^() {
self.splashView.alpha = 0.0;
}
completion:^() {
self.viewController.splashViewFaded = YES;
[self.splashView removeFromSuperview];
}];
明智的话,我从记忆中输入了这个,所以它可能无法编译,如果你复制并粘贴,请阅读文档。
答案 1 :(得分:2)
在动画期间,alpha属性返回的值不一定与视图的瞬时alpha匹配。此外,一旦alpha达到0,就无法保证系统会重新检查shouldAutorotateToInterfaceOrientation:
的结果,因此您的界面可能会被卷入纵向,直到设备被转动为止。
首先,考虑这是否真的是最好的计划。如果用户将设备保持在横向或倒置状态,那么就他们如何看待它而言,向侧面或倒置显示闪屏是否真的是最好的体验。虽然如果你的“闪屏”与Default.png匹配,我可以在iPhone上看到它,因为它也总是以纵向模式显示。
但是如果必须的话,更好的计划是让你的willAnimateRotationToInterfaceOrientation:duration:
方法将反向旋转应用到初始屏幕视图,以保持闪屏“直立”,无论其余部分的方向如何该应用程序。有关详细信息,请参阅Keeping controls in landscape mode but allowing uitabbar to switch。
答案 2 :(得分:1)
alpha值应介于1.0和0.0之间,所以我猜这可能是你的问题。
答案 3 :(得分:1)
你应该只使用块动画:
[UIView animateWithDuration:2.0
animations:^{
splashView.alpha = 0.0;
}
completion:^(BOOL finished){
return YES;
}];
这将运行动画块,一旦完成,为您的方法返回YES。