2010-09-28 49 views
0

我正在構建一個應用程序,在滾動視圖完成縮放後必須添加疊加視圖。由於我認爲scrollview沒有完成縮放...沒有biggie ...所以我決定將疊加層添加到sharedApplication的keyWindow中,但我在向scrollview本身添加疊加層並保持位置一致方面存在問題。爲什麼我必須重新定位這個UIView的任意數量?

現在,應用程序是橫向的,我必須對覆蓋層進行轉換才能正確定位...這很好。這個問題出現在必須重新定位疊加層的這個看似隨意的數量以使其居中......我不喜歡這樣做特別的事情,所以我想我會問,如果有人遇到過這樣的事情,爲什麼視圖必須重新定位這個奇怪的偏移量。任何見解都會很棒。

CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2); 
tempOverlay.view.transform = transform; 

// Repositions and resizes the view. 
CGRect contentRect = CGRectMake(-107, -80, 480, 320); //where does this offset come from?!? 
tempOverlay.view.bounds = contentRect; 

[[[UIApplication sharedApplication] keyWindow] addSubview:tempOverlay.view]; 
+0

出於好奇,以上代碼中的'tempOverlay'是什麼? – imaginaryboy 2010-09-28 04:30:01

+0

tempOverlay是一個視圖,它將UIImageView和UITextView添加到屏幕上,以在UIScrollView中描述可見下方的地圖部分。這就是所謂的tempOverlay,因爲它很快就會改變,更多的是作爲對自己的心理記錄。 – diatrevolo 2010-09-28 04:37:18

回答

0

我會張貼此作爲註釋,而不是原來的答案,但我只是去尋找答案路由,而不是,雖然我不認爲有真的足夠的信息在這裏繼續下去。以下假設你有一個相當標準的iOS應用程序,除了將視圖附加到keyWindow的覆蓋怪物之外。

首先,不要添加疊加視圖到keyWindow。相反,在你的根視圖控制器上定義一些要求顯示疊加層的方法。然後在您的根視圖控制器代碼中,將覆蓋視圖添加到控制器視圖的其他所有內容中。

然後,不要應用轉換,因爲它不再需要旋轉視圖。

在創建視圖時,將其設置爲frame爲根控制器視圖的bounds。還可以通過UIView的autoresizingMask將其設置爲具有靈活的寬度和高度。然後假設你的根UIView的autoresizesSubview屬性設置爲YES,你的覆蓋視圖將被很好地調整大小以匹配根視圖的大小,因爲它改變方向。

如果在此之後所有的覆蓋UIView內容的位置不正確,我懷疑的問題是,UIView的內容中,並沒有任何與您的幀/邊界需要任何幻數。

注:我還沒有真正嘗試上面,我不100%的信心,在一般根UIView將享受其扔在它的上面,在另一方面,這種額外的覆蓋物的UIView,它可能仍然一無所知它的一切都將正常工作。無論哪種方式,對我來說,感覺比你當前正在嘗試做的「特設」要少得多。

+0

我聽說你。覆蓋圖是固定大小,而根視圖控制器的視圖是滾動視圖,所以它總是一個移動的目標。我想我可能會遇到這種情況,並將所有內容封裝在標準視圖中。該方向不會改變中間應用程序,並且我只在keyWindow中添加疊加層,以避免重新計算其位置,節省幾個週期(儘管這可能毫無意義)。隨着我深入研究,我會發布我的發現。感謝您的想法。 – diatrevolo 2010-09-28 03:37:07

+0

我最終將覆蓋圖添加到根視圖控制器以避免轉換。 – diatrevolo 2010-10-06 15:05:19

相關問題