2016-01-21 56 views
0

我已經閱讀了幾乎所有與這個主題相關的東西,但從字面上看,沒有任何工作。在設備方向變化的UiView中心UIActivityIndi​​catorView

_spinnerContainer出現,_spinner被顯示在它的中間,但是當設備旋轉時,旋轉_spinnerContainer如預期並在舊_spinnerContainer的位置的中間_spinner凍結。

我相信它應該是一些非常微不足道的東西。

任何幫助?

謝謝!

_spinnerContainer = [[UIView alloc] initWithFrame:self.rectForView]; 
_spinnerContainer.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.35]; 
_spinnerContainer.autoresizesSubviews = NO; 
_spinnerContainer.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
_spinnerContainer.clearsContextBeforeDrawing = YES; 
_spinnerContainer.clipsToBounds = NO; 
_spinnerContainer.contentMode = UIViewContentModeCenter; 

_spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
_spinner.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin; 
_spinner.center = _spinnerContainer.center; 
[_spinner startAnimating]; 
[_spinnerContainer addSubview:_spinner]; 
+0

如何'_spinnerContainer'曾經進入界面?沒有更多上下文,你的代碼就沒有意義。 – matt

回答

1

只要刪除這個:

_spinnerContainer.autoresizesSubviews = NO; 
+0

非常感謝!你完全贊同這一點! 我就像一隻熊:2x2 = 5,我幾乎砸了我的頭=) –

1

您似乎認爲,這樣的代碼:

_spinner.center = _spinnerContainer.center; 

...是指「把微調的微調容器的中心」。它沒有。這是沒有意義的,其實,因爲_spinnerContainer.center是位置某處微調容器的上海華,並在上海華的座標系 - 而_spinner.center需要被相對定位上海華盈,即相對於微調容器本身內部的座標系(也稱爲bounds)。

所以,雖然你說「當_spinnerContainer出現,_spinner顯示在它的中間,」實際上這或多或少是巧合。您的代碼甚至不會正確構建接口的初始接口,所以旋轉後它不起作用也就不足爲奇了。

以我個人的觀點來看,這裏最簡單的解決方案是拋開代碼並使用自動佈局約束來定位這些視圖。自動佈局具有的優點是,它可以準確描述不管輪換應該發生什麼。

+0

謝謝@matt。你的解釋非常有趣 - 我不是iOS開發人員。決定從德米特里的解決方案開始,它就像一個魅力=) –

+0

優秀!但是,你仍然不應該將視角的中心設置在其超視圖的中心,這似乎只在非常罕見的情況下才起作用(並且你偶然發現了一個)。在我看來,學習自動佈局和做你約束的事情要簡單得多,即使它看起來更多代碼開始。 – matt

相關問題