2012-05-03 102 views
1

什麼是最安全和最有效的方式將一個新的UIView放置在視圖堆棧頂部的應用程序的UIWindow的界限時,從縱向到橫向的屏幕旋轉發生? 另外,從橫向返回到縱向時,要移除此子視圖。從設備方向和一個新的UIView的屏幕旋轉

基本上在App被創建爲最有:

-UIWindow:

--UIView

---所有子視圖(包括TabView的控制器)

我想創建:

-UIWindow:

--UIView(這裏並引發一個視圖控制器)(新的,將被放置在頂部)

--UIView

---所有子視圖

這是錯誤的嗎?有意想不到的文件來幫助做到這一點。

回答

0

我找到了一個工作解決方案。你可以提供更好的嗎?

ArtsDayAppDelegate *appDelegate = (ArtsDayAppDelegate*)[[UIApplication sharedApplication] delegate]; 
    UIView *landscapeView; 

    if (!landscapeView) { 
     landscapeView = [[UIView alloc] initWithFrame: frame]; 
    } 

    [landscapeView setBackgroundColor:[UIColor blackColor]]; 
    ..add various views.. 
    [appDelegate.window.rootViewController.view addSubview:landscapeView]; 
1

如果創建一個視圖控制器來容納所有的子視圖,你可以只使用旋轉功能將被調用爲您提供:

willRotateToInterfaceOrientation:時間: 和 didRotateFromInterfaceOrientation:

因此,可以說你使用didRotateFromInterfaceOrientation你檢查

if(UIInterfaceOrientationIsLandscape(orientation)) 
{ 
    [yourView removeFromSuperView]; 
} 
else 
{ 
    [self.view addSubView: yourView]; 
} 
+0

其中應用程序的結構,我會做這個?應用程序代表? – achi

+0

我從你最初的帖子中提出你想在viewcontroller中做這個,所以你可以把這個邏輯放在函數「willRotateToInterfaceOrientation」中,它是任何UIViewController的一部分。在上面的代碼中,「self」是指視圖控制器。你可以在這裏看到官方文檔[鏈接](http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html)當你的應用旋轉時,這個函數將被調用你和它會通過你的方向,將被改變,你可以使用我的代碼來檢查。 – rooster117

+0

好的,我看到你在說什麼,但是因爲應用程序使用TabView,所以委託是創建UITabViewController並放置在第一個視圖中的地方,即應用程序委託的「根視圖控制器」。我這樣說,因爲我相信任何子視圖都受限於他們的超級視圖範圍。這是正確的嗎?我實際上可以查看全屏視圖嗎? – achi