2011-05-12 53 views
2

我有一個啓動畫面消失我從100到0。我想shouldAutorotateToInterfaceOrientation返回YES只有當alpha爲0阿爾法我不能得到這個代碼工作:不允許旋轉飛濺上鑑於iOS的

if (splashView.alpha == 0) 
{ 
    return YES; 
} else { 
    return NO; 
} 

相反,splashView.alpha總是返回null。有任何想法嗎?

回答

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]; 
       }]; 

聰明人的話,我從記憶,如果你複製和粘貼請去閱讀文檔中鍵入此所以它可能不會編譯。

+0

這是我需要的解決方案。我從NSLog瞭解到問題始終是動畫可能需要X秒才能運行,但這只是視覺上的。如果您馬上檢查Alpha,它將已被設置爲零,因爲動畫本身基本上只是您創建的一個動作。這個完成的回調方法完成了這項工作。 – 2011-05-15 19:46:03

+0

如果你打算這樣做,就不需要'splashViewFaded'變量。只需測試'splashView.superview'是否爲零。 – Anomie 2011-05-15 20:28:55

1

alpha值應該在1.0和0.0之間,所以我猜這可能是你的問題。

+0

這有助於轉換,但它並沒有防止飛濺旋轉。我錯過了一個步驟? – 2011-05-12 15:49:22

2

在動畫過程中,從alpha屬性返回的值不一定與視圖的瞬時alpha相匹配。此外,一旦Alpha達到0,系統將不能保證系統重新檢查shouldAutorotateToInterfaceOrientation:的結果,因此您的界面可能會被卡住,直到設備轉動。

首先,考慮這是否真的是最好的計劃。如果用戶以橫向或倒置的方式握住設備,是否真的是將閃屏側向或顛倒地顯示在屏幕上的最佳體驗。儘管如果您的「啓動畫面」與Default.png相匹配,我仍然可以在iPhone上看到它,因爲它總是以縱向模式顯示。

但是,如果您必須做出更好的計劃,您的willAnimateRotationToInterfaceOrientation:duration:方法就會在啓動屏幕視圖中應用反向旋轉,以保持啓動畫面「直立」,而不管應用程序其餘部分的方向如何。詳情請參閱Keeping controls in landscape mode but allowing uitabbar to switch

1

你應該只使用塊動畫:

[UIView animateWithDuration:2.0 
       animations:^{ 
        splashView.alpha = 0.0; 
       } 
       completion:^(BOOL finished){ 
        return YES; 
       }]; 

這將運行動畫塊和一次完成,爲你的方法返回YES。