2012-03-25 42 views
2

我瞎搞學習有關更改UI佈局時的iPhone上的設備變化的方向和我碰到的一個問題..圖片瀏覽消失在設備方向的變化 - iPhone - 目標C

我有一個主 - 細節的應用程序,如果我改變方向,當我在細節視圖中一切工作正常,但如果我在主視圖控制器中更改它,然後推動細節視圖,除了我的圖像視圖之外,一切工作顯示..

下面是相關的代碼:

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

任何人有任何想法?

回答

3

如果視圖已經創建並駐留在內存中,則不會調用viewDidLoad。

嘗試你的代碼移動到

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