2010-11-09 2 views
0

Привет у меня есть код, который выглядит следующим образомiphone ориентация не работает

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
    // Custom initialization 

    username = [[UILabel alloc]initWithFrame:CGRectMake(53,115, 83, 21)]; 
    username.text = @"Username"; 
    [username setFont:[UIFont fontWithName:@"Arial" size:14]]; 

    password = [[UILabel alloc]initWithFrame:CGRectMake(53,188, 75, 21)]; 
    password.text = @"Password"; 
    [password setFont:[UIFont fontWithName:@"Arial" size:14]]; 


    txtusername = [[UITextField alloc]initWithFrame:CGRectMake(42, 144, 233, 31)]; 
    [txtusername setBorderStyle:UITextBorderStyleRoundedRect]; 
    [txtusername setPlaceholder:@"Username"]; 
    [txtusername setAutocorrectionType:UITextAutocorrectionTypeNo]; 
    txtusername.delegate = self; 
    txtusername.returnKeyType = UIReturnKeyDone; 

    txtpassword = [[UITextField alloc]initWithFrame:CGRectMake(42, 217, 233, 31)]; 
    [txtpassword setBorderStyle:UITextBorderStyleRoundedRect]; 
    [txtpassword setPlaceholder:@"Password"]; 
    [txtpassword setAutocorrectionType:UITextAutocorrectionTypeNo]; 
    txtpassword.delegate = self; 
    txtpassword.returnKeyType = UIReturnKeyDone; 

    loginbutton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [loginbutton setFrame:CGRectMake(110, 269, 124, 26)]; 
    [loginbutton setTitle:@"Login" forState:UIControlStateNormal]; 


} 
return self; 
} 


- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
UIInterfaceOrientation currentOrientation = [[UIDevice currentDevice]orientation]; 

switch (currentOrientation) 
{ 
    case UIInterfaceOrientationLandscapeLeft: 
    case UIInterfaceOrientationLandscapeRight: 

     username.center = CGPointMake(157, 71); 
     password.center = CGPointMake(157,144); 
     txtusername.center = CGPointMake(146,100); 
     txtpassword.center = CGPointMake(120,172); 
     loginbutton.center = CGPointMake(214,225); 
     break; 


    case UIInterfaceOrientationPortrait: 
    case UIInterfaceOrientationPortraitUpsideDown: 
     username.bounds = CGRectMake(53, 115, 83, 21); 
     //username.center = CGPointMake(53, 115); 
     password.bounds = CGRectMake(53, 188, 75, 21); 
     //password.center = CGPointMake(53,188); 
     txtusername.center = CGPointMake(42,144); 
     txtpassword.center = CGPointMake(42,217); 
     loginbutton.center = CGPointMake(110,269); 
     break; 

} 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    //return (interfaceOrientation == UIInterfaceOrientationPortrait); 
    return YES; 
} 

Теперь то, что, как представляется, проблема заключается в том, что интерфейс не получает ориентированный как это слишком, компоненты не приходят к координаты, как я их дал, когда я поворачиваю оборудование iPhone влево и вправо, они не приходят в эти координаты. Когда мой просмотр загружает все в порядке, но когда я поворачиваю свой взгляд, я получаю эту ошибку. Пожалуйста, помогите мне, ребята Спасибо

+0

Вы пытались проверить, какое значение вы получаете от currentOrientation? Раньше у меня были ошибки с [[UIDevice currentDevice]), и я нашел, что лучше использовать [self interfaceOrientation], предполагая, что self является UIViewController (или подклассом). – Altealice

+0

Я заменил строку IInterfaceOrientation currentOrientation = [[UIDevice currentDevice] ориентация]; с UIInterfaceOrientation currentOrientation = [self interfaceOrientation]; но использование не по-прежнему не в состоянии это сделать ... – Radix

ответ

0

Посмотрите на образец предоставленного кода. Похоже, вы просто перепутали понятия рамки, рамки и центр.

Давайте посмотрим на имя пользователя. Когда мы создаем и добавляем метку, получаем frame = {{53, 115}, {83, 21}}, bounds = {{0, 0}, {83, 21}} и center = {94.5, 125.5}.

Таким образом, рамка является абсолютным положением метки в супер-представлении. Он расположен в точке x = 53 и y = 115. Вторая часть кадра - это размер, поэтому мы имеем ширину 83 и высоту 21. Границы выражены в собственной системе координат метки. Вот почему вы обычно устанавливаете местоположение на {0, 0}. Центральная точка - это центр кадра. что {53 + 83/2, 115 + 21/2} = {94,5, 125,5}

Чтобы использовать центральную точку, чтобы переместить метку имя пользователя обратно в свое первоначальное положение вы бы

username.center = CGPointMake(53 + username.frame.size.width/2, 115 + username.frame.size.height/2); 

Вы может также просто установить рамку снова

username.frame = CGRectMake(53, 115, 83, 21); 
+0

Настройка кадра сделала трюк благодаря Роберту за очищение моих концепций, – Radix

Смежные вопросы