2011-07-08 165 views
1

我有一個iPad應用程序,我想在側身方向而不是僅縱向工作。我已經編程地將圖像,標籤和按鈕放入我的視圖中,並使用CGRectMake(x,x,x,x)告訴它們將視圖放到中心的哪個位置。當應用程序水平旋轉時,我需要我的標籤和按鈕向上移動(因爲它們在橫向模式下不能下降),但保持在中心位置。下面是一些代碼,我一直在玩:在視圖旋轉時移動對象

if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)) 
{ 
    lblDate = [[UILabel alloc] initWithFrame:CGRectMake(384-(fieldWidth/2)-30,controlTop+45,120,40)]; //these dimensions aren't correct, though they don't matter here 

    lblDate.text = @"Date:"; 
    lblDate.backgroundColor = [UIColor clearColor]; 
    [contentView addSubview:lblDate]; 
} else { 
    //the orientation must be portrait or portrait upside down, so put duplicate the above code and change the pixel dimensions 
} 

感謝您的幫助!

回答

0

我知道這可能是一個老問題,現在看日期,但我最近面臨同樣的問題。您可能會偶然發現許多建議,例如轉換主視圖的子視圖或其圖層。非我的工作。

實際上,我發現的獨立解決方案是因爲您希望您的UI控件能夠動態定位,因此請勿將它們主要部署在界面構建器中。界面生成器可以幫助您瞭解縱向和橫向取向的動態控件所需的位置。即在界面構建器,一幅肖像和其他景觀中製作兩個獨立的測試視圖,根據需要對齊控件,然後將X,Y,寬度和高度數據向右對齊,以便爲每個控件使用CGRectMake。

只要您從界面構建器中記下所有需要的定位數據,就可以去除已經繪製的控件和插座/操作鏈接。他們現在不需要了。

當然,不要忘記實現UIViewController的willRotateToInterfaceOrientation來設置每個方向更改的控件框架。

@interface 

//Declare your UI control as a property of class. 
@property (strong, nonatomic) UITableView *myTable; 

@end 

@implementation 

// Synthesise it 
@synthesize myTable 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

// Check to init for current orientation, don't use [UIDevice currentDevice].orientation 
    if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    { 
     myTable = [[UITableView alloc] initWithFrame:CGRectMake(20, 20, 228, 312)]; 
    } 
    else if (self.interfaceOrientation == UIInterfaceOrientationPortrait) 
    { 
     myTable = [[UITableView alloc] initWithFrame:CGRectMake(78, 801, 307, 183)]; 
    } 
} 

    myTable.delegate = self; 
    myTable.dataSource = self; 

    [self.view addSubview:myTable]; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    { 
     // Show landscape 
     myTable.frame = CGRectMake(20, 20, 228, 312); 

    } 
    else 
    { 
     // Show portrait 
     myTable.frame = CGRectMake(78, 801, 307, 183); 
    } 
}