我已經使用UIDeviceOrientationDidChangeNotification
來獲取景觀和potrait模式的通知。在我的項目中,我需要相應地更改放置在UIView
上的UIControls
的位置。我是否必須手動更改每個UIControl
的幀大小,因爲這是忙碌的?iPhone中的自動定位
0
A
回答
1
在您的視圖控制器應實現方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
這種方法應該支持的方向返回YES
。
如果您希望子視圖自動調整大小和重新定位,那麼您應該設置適當的屬性autoresizingMask
該視圖。例如:
blackView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
0
您確實需要使用shouldAutorotateToInterfaceOrientation ...方法,但您需要做更多的工作才能正常工作。首先,您需要兩個xib文件,一個用於橫向,另一個用於縱向。然後,您將需要使用你的函數是這樣的:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft){
//prepare for a Landscape view
}
else{
//prepare for a portrait view
}
return YES;
}
至於準備橫向或縱向視圖,使用自動尺寸可以工作,但你可能需要有完全獨立的xibs。我找不到在活動視圖控制器中更改xib的方法,因此我建議製作一個視圖控制器的獨立實例。示例:
當您呈現viewController的第一個實例時,請將其與肖像xib一起展示。您可能還需要一個布爾值來跟蹤當前的xib。然後有這樣的代碼來實現:
/*Assuming you are using a viewcontroller called viewController, and you have a boolean called xibPortrait.
You have presented this view controller using the portrait xib.
You also have a landscape xib, Landscape.xib
*/
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ((interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft) && xibPortrait){
xibPortrait = FALSE;
viewController *Land = [[ViewController alloc] initWithNibName:@"Landscape" bundle:nil];
[self presentModalViewController:Land animated:NO];
[Land release];
}
else if(!xibPortrait){
[self.parentViewController dismissModalViewControllerAnimated:NO];
xibPortrait = TRUE;
}
return YES;
}
//This should work but if you can, you should try to use Autoresizing.
編輯: 我也發現了這裏面有人貼在我的問題之一。它可以幫助你的應用程序比上面使用我的方法更有效地工作: http://aseriesoftubes.com/articles/ipad-development-101-orientation/
相關問題
- 1. Iphone - UIToolbar自動位置
- 2. iPhone SDK自動滾動UIWebView到一個特定的位置
- 3. iphone中的固定位置
- 4. 自動定位.jar
- 5. iPhone UIButton自定義動畫
- 6. iphone自動鎖定值?
- 7. 在iphone中自定義捲曲動畫?
- 8. Pycharm中的自動光標定位
- 9. iphone中的自定義UIProgressView
- 10. 自動定位窗口 - WPF
- 11. 自動視圖定位JEditorPane
- 12. jQuery自動元素定位
- 13. 自動錶單定位
- 14. CLLocationManager - iPhone應用程序中的自定義位置管理器
- 15. 在matplotlib中自動定位文本框
- 16. 自動定位控制(不TableLayoutPanel中)
- 17. VBScript中無法定位自動化類
- 18. iPhone SDK中的自動滾動功能
- 19. iPhone中的UITextView滾動(自動)?
- 20. iPhone:定位問題
- 21. iPhone:定位問題
- 22. iPhone定位方法
- 23. 確定位置iphone
- 24. iphone中的定製動畫
- 25. 固定的iPhone/iPod位置
- 26. 關於iPhone的定位
- 27. 位置:iPhone中的固定頁腳iOS
- 28. 如何在iPhone中自動允許當前位置?
- 29. 自定義動態TableViewCell文本定位
- 30. iPhone Event Kit - 活動自定義字段
這裏autoresizingMask意味着我可以縮小或縮放子視圖,這是相對於superview更改靈活嗎?但是在我的項目中,根據定向模式的類型,我已經給每個uicontrol固定位置。我可以使用autoresizingMask來更改uicontrols的來源。 – user574089
值'UIViewAutoresizingFlexibleWidth'和'UIViewAutoresizingFlexibleHeight'將幫助您根據其超級視圖自動調整視圖的大小。其他值將幫助您在超視圖中更改視圖的來源。嘗試與他們一起玩......也可以打開IB - > Pick View - > Utilities - > Size Inspector - > Autoresizing。 – Nekto