2012-02-24 70 views
0

所以我也跟着上創建與設備方向有關自定義視圖下面的教程:如何處理時,設備上的iOS旋轉換一個視圖

http://www.theappcodeblog.com/2011/03/30/orientation-change-tutorial-change-the-view-when-the-orientation-changes/

總結文章中,筆者能夠生成自定義在檢測到設備旋轉時,通過指向XIB文件中的新頂層視圖來查看橫向和縱向方向的視圖。

因此,我採用了複雜的視圖層次結構(許多按鈕,滑塊,視圖中的視圖),複製頂層的所有內容以創建橫向視圖。然後創建風景視圖的自定義安排。在我的代碼檢測到橫向方向的方法中,我的代碼在檢測縱向時指向橫向層次結構和縱向的頂部。

這是有效的,除了景觀層次中的所有IBOutlets(UIView,UIButton等)仍然在縱向視圖層次結構中引用它們的等效對象。我在運行時對這些UI元素做了大量特殊處理,所以我需要IBOutlets而不僅僅是IBActions。我發現我在橫向視圖中複製的UI元素可以指向相同的IBActions,但不能與縱向層次結構中的IBOutlet共享IBOutlet。

我是否必須複製所有對象並讓我的代碼管理所有內容(找出要使用的對象)?

回答

1

這裏有一種方法可能適合你。

如果在需要交換橫向視圖時正確加載橫向筆尖,則可以將視圖控制器作爲筆尖文件的所有者傳遞,並且筆尖加載器將根據連接覆蓋視圖控制器的插座在風景筆尖。

而且當您需要再次交換縱向視圖時,加載縱向筆尖並將視圖控制器作爲文件的所有者。筆尖加載器將再次覆蓋您的視圖控制器的插座,這次基於肖像筆尖中的連接。

在第一次需要筆尖時,您應該爲每個筆尖懶散地創建一個UINib對象,並且將筆記放置在其周圍以加快後續旋轉的加載速度。

+0

確定我試了一下。所以我得到我需要做的是1.複製.xib文件(可以在Finder應用程序中執行)。 2.重新排列布局。 3.在適當的時候加載我的風景筆尖......是否有這個電話? 「 - (NSArray *)loadNibNamed:(NSString *)名稱所有者:(id)所有者選項:(NSDictionary *)選項」....那就是它? – Joe 2012-02-24 07:29:18

+0

您可以使用該方法。如果你發現它太慢了,你應該看'UINib'。 – 2012-02-24 07:31:17

+0

我試過這種方法,調用是:[[NSBundle mainBundle] loadNibNamed:@「MyLandscapeOrPortraitNib」owner:self options:nil]; 裏面 - (void)orientationChanged:(id)對象(取決於它是否檢測到風景/肖像)。然而,當新的筆尖被加載時,我只看到我的一些內容,並且我的應用程序很快就崩潰了(由於缺乏內容)。現在我注意到的是,如果我註釋掉筆尖加載線,那麼我的應用程序在肖像模式下運行100%。然後,當我添加筆尖時,我會在橫向和縱向上丟失內容。 – Joe 2012-02-24 21:26:28

0

我用loadNibNamed解決了它。基本上我必須做的是保存所有IBOulet變量的狀態(使用非IB變量)以及在視圖中初始化的其他變量。當加載一個新的Nib時,一切都會重置爲默認狀態。這很煩人,但這似乎是目前解決這個問題的最好方法。