2012-03-25 11 views
2

Ich bin Herumspielen Lernen über UI-Layout zu ändern, wenn die Ausrichtung des Geräts ändert auf dem iPhone, und ich habe auf ein Problem stoßen ..Bild Ansicht verschwindet auf Geräteausrichtung ändern - iPhone - Ziel c

I habe eine Master-Detail-Anwendung, wenn ich die Ausrichtung ändere, wenn ich in der Detailansicht bin, funktioniert alles gut, aber wenn ich es in der Master-Ansicht-Controller ändern und dann die Detailansicht drücken, funktioniert alles außer meiner Bildansicht nicht zeigen ..

Hier ist der zugehörige Code:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (UIDeviceOrientationIsLandscape(orientation)){ 
     [self layoutLandscape]; 
    } 
    else if (UIDeviceOrientationIsPortrait(orientation)){ 
     [self layoutPortrait]; 
    } 

    //set up UI elements 
    nameLabel.text = name; 
    dateOfBirthLabel.text = dateOfBirth; 
    numberOfVotesLabel.text = numberOfVotes; 
    reasonForFameLabel.text = reasonForFame; 
    numberOfStarsLabel.text = numberOfStars; 
    [indicator startAnimating]; 
    //Perform this method in background (gets the product image from URL) 
    [self performSelectorInBackground:@selector(loadImage) withObject:nil]; 

    //Gives UIImageView memeThumb a orange border 
    //Must import the QuartsCore Framework for this to work 
    [imageView.layer setBorderColor: [[UIColor blackColor] CGColor]]; 
    [imageView.layer setBorderWidth: 2.0]; 
} 

- (void) layoutLandscape{ 
    imageView.frame = CGRectMake(20, 20, 200, 150); 
    indicator.frame = CGRectMake(150, 40, 20, 20); 

    nameMarker.frame = CGRectMake(70, 115, 51, 150); 
    dateOfBirthMarker.frame = CGRectMake(20, 135, 101, 180); 
    numberOfVotesMarker.frame = CGRectMake(233, 10, 134, 30); 
    reasonForFameMarker.frame = CGRectMake(230, 60, 137, 30); 
    numberOfStarsMarker.frame = CGRectMake(236, 110, 130, 30); 

    nameLabel.frame = CGRectMake(125, 175, 135, 30); 
    dateOfBirthLabel.frame = CGRectMake(125, 210, 135, 30); 
    numberOfVotesLabel.frame = CGRectMake(372, 10, 134, 30); 
    reasonForFameLabel.frame = CGRectMake(372, 60, 135, 30); 
    numberOfStarsLabel.frame = CGRectMake(372, 110, 135, 30); 
} 

- (void) layoutPortrait{ 
    imageView.frame = CGRectMake(20, 20, 280, 197); 
    indicator.frame = CGRectMake(150, 109, 20, 20); 

    nameMarker.frame = CGRectMake(106, 225, 51, 30); 
    dateOfBirthMarker.frame = CGRectMake(56, 263, 101, 30); 
    numberOfVotesMarker.frame = CGRectMake(23, 301, 134, 30); 
    reasonForFameMarker.frame = CGRectMake(20, 339, 137, 30); 
    numberOfStarsMarker.frame = CGRectMake(27, 377, 130, 30); 

    nameLabel.frame = CGRectMake(165, 225, 135, 30); 
    dateOfBirthLabel.frame = CGRectMake(165, 263, 135, 30); 
    numberOfVotesLabel.frame = CGRectMake(165, 301, 134, 30); 
    reasonForFameLabel.frame = CGRectMake(165, 339, 135, 30); 
    numberOfStarsLabel.frame = CGRectMake(165, 377, 135, 30); 
} 

- (void) loadImage { 
    NSURL *imageURL = [NSURL URLWithString:URL]; 
    NSData *data = [NSData dataWithContentsOfURL:imageURL]; 
    UIImage *image = [UIImage imageWithData:data]; 
    imageView.image = image; 
    [indicator stopAnimating]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (UIDeviceOrientationIsLandscape(orientation)) { 
     [self layoutLandscape]; 
    } 
    else if (UIDeviceOrientationIsPortrait(orientation)) { 
     [self layoutPortrait]; 
    } 
} 

Wer hat irgendwelche Ideen?

Antwort

3

viewDidLoad wird nicht aufgerufen, wenn die Ansicht bereits erstellt wurde und sich im Speicher befindet.

versuchen, Ihren Code zu

-(void) viewWillAppear 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (UIDeviceOrientationIsLandscape(orientation)){ 
     [self layoutLandscape]; 
    } 
    else if (UIDeviceOrientationIsPortrait(orientation)){ 
     [self layoutPortrait]; 
    } 
} 
bewegen
Verwandte Themen