我有一個啓動畫面消失我從100到0。我想shouldAutorotateToInterfaceOrientation返回YES只有當alpha爲0阿爾法我不能得到這個代碼工作:不允許旋轉飛濺上鑑於iOS的
if (splashView.alpha == 0)
{
return YES;
} else {
return NO;
}
相反,splashView.alpha總是返回null。有任何想法嗎?
我有一個啓動畫面消失我從100到0。我想shouldAutorotateToInterfaceOrientation返回YES只有當alpha爲0阿爾法我不能得到這個代碼工作:不允許旋轉飛濺上鑑於iOS的
if (splashView.alpha == 0)
{
return YES;
} else {
return NO;
}
相反,splashView.alpha總是返回null。有任何想法嗎?
當您將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];
}];
聰明人的話,我從記憶,如果你複製和粘貼請去閱讀文檔中鍵入此所以它可能不會編譯。
alpha值應該在1.0和0.0之間,所以我猜這可能是你的問題。
這有助於轉換,但它並沒有防止飛濺旋轉。我錯過了一個步驟? – 2011-05-12 15:49:22
在動畫過程中,從alpha屬性返回的值不一定與視圖的瞬時alpha相匹配。此外,一旦Alpha達到0,系統將不能保證系統重新檢查shouldAutorotateToInterfaceOrientation:
的結果,因此您的界面可能會被卡住,直到設備轉動。
首先,考慮這是否真的是最好的計劃。如果用戶以橫向或倒置的方式握住設備,是否真的是將閃屏側向或顛倒地顯示在屏幕上的最佳體驗。儘管如果您的「啓動畫面」與Default.png相匹配,我仍然可以在iPhone上看到它,因爲它總是以縱向模式顯示。
但是,如果您必須做出更好的計劃,您的willAnimateRotationToInterfaceOrientation:duration:
方法就會在啓動屏幕視圖中應用反向旋轉,以保持啓動畫面「直立」,而不管應用程序其餘部分的方向如何。詳情請參閱Keeping controls in landscape mode but allowing uitabbar to switch。
你應該只使用塊動畫:
[UIView animateWithDuration:2.0
animations:^{
splashView.alpha = 0.0;
}
completion:^(BOOL finished){
return YES;
}];
這將運行動畫塊和一次完成,爲你的方法返回YES。
這是我需要的解決方案。我從NSLog瞭解到問題始終是動畫可能需要X秒才能運行,但這只是視覺上的。如果您馬上檢查Alpha,它將已被設置爲零,因爲動畫本身基本上只是您創建的一個動作。這個完成的回調方法完成了這項工作。 – 2011-05-15 19:46:03
如果你打算這樣做,就不需要'splashViewFaded'變量。只需測試'splashView.superview'是否爲零。 – Anomie 2011-05-15 20:28:55