2010-11-09 5 views
0

Salut un code qui ressemble à ceciorientation iphone je n'ai pas travailler

- (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; 
} 

Maintenant, ce qui semble être le problème est que l'interface ne s'orientée comme elle a trop, les composants ne viennent pas à la coordonnées comme je leur ai donné quand je fais tourner le matériel de l'iPhone à gauche et à droite, ils ne viennent pas à ces coordonnées, Lorsque ma vue se charge tout va bien, mais quand je tourne ma vue, je reçois ce bug. S'il vous plaît aidez-moi les gars Merci

+0

Avez-vous essayé de vérifier quelle valeur vous obtenez de currentOrientation? J'ai eu des bugs avec l'orientation [[UIDevice currentDevice]] auparavant, et j'ai trouvé qu'il est préférable d'utiliser [self interfaceOrientation], en supposant que self est un UIViewController (ou une sous-classe). – Altealice

+0

J'ai remplacé la ligne IInterfaceOrientation currentOrientation = [[UIDevice currentDevice] orientation]; avec UIInterfaceOrientation currentOrientation = [self interfaceOrientation]; – Radix

Répondre

0

En regardant l'exemple de code fourni, il semble que vous ayez juste mélangé les concepts de cadre, de limites et de centre.

Regardons le nom d'utilisateur. Lorsque nous créons et ajoutons l'étiquette, nous obtenons frame = {{53, 115}, {83, 21}}, bounds = {{0, 0}, {83, 21}} et center = {94.5, 125.5}. Donc, la trame est la position absolue de l'étiquette dans la super vue. Il est situé à x = 53 et y = 115. La deuxième partie de la trame est la taille, donc nous avons une largeur de 83 et une hauteur de 21. Les limites sont exprimées dans le système de coordonnées propre à l'étiquette. C'est pourquoi vous avez normalement l'emplacement défini sur {0, 0}. Le point central est le centre du cadre. qui est {53 + 83/2, 115 + 21/2} = {94,5, 125,5}

Pour utiliser le point central pour déplacer l'étiquette de nom d'utilisateur de retour à sa position d'origine, vous feriez

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

Vous peut également simplement définir le cadre à nouveau

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

La mise en place du cadre a fait l'affaire grâce à Robert pour l'effacement de mes concepts, – Radix