views:

278

answers:

1

Hi,

I have set up an application and used some of the basic code from "The iPhone Developer's Cookbook" to create a simple view. The application works correctly in portrait mode, but when it is rotated, the dimensions of the boxes stay the same. Here is my code:

- (void)loadView {
    //Create the full application frame (minus the status bar) - 768, 1004
    CGRect fullRect = [[UIScreen mainScreen] applicationFrame]; 

    //Create the frame of the view ie fullRect-(tabBar(49)+navBar(44)) - 768, 911
    CGRect viewRect = CGRectMake(0, 64, fullRect.size.width, fullRect.size.height-93.0);

    //create the content view to the size
    contentView = [[UIView alloc] initWithFrame:viewRect]; 
    contentView.backgroundColor = [UIColor whiteColor];

    // Provide support for autorotation and resizing 
    contentView.autoresizesSubviews = YES;
    contentView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);

    self.view = contentView; 
    [contentView release];

    // reset the origin point for subviews. The new origin is 0,0 
    viewRect.origin = CGPointMake(0.0f, 0.0f);

    // Add the subviews, each stepped by 32 pixels on each side 
    UIView *subview = [[UIView alloc] initWithFrame:CGRectInset(viewRect, 32.0f, 32.0f)]; 
    subview.backgroundColor = [UIColor lightGrayColor]; 
    [contentView addSubview:subview]; 
    [subview release];

    subview = [[UIView alloc] initWithFrame:CGRectInset(viewRect, 64.0f, 64.0f)]; 
    subview.backgroundColor = [UIColor darkGrayColor]; 
    [contentView addSubview:subview]; 
    [subview release];

    subview = [[UIView alloc] initWithFrame:CGRectInset(viewRect, 96.0f, 96.0f)]; 
    subview.backgroundColor = [UIColor blackColor]; 
    [contentView addSubview:subview]; 
    [subview release];
}

Is there any way to have this reload with the new dimensions when it is rotated or a better way of accommodating the orientation change?

Thanks JP

+1  A: 

I may be misunderstanding your problem. By "boxes", do you mean the subviews?

If so, the subviews will retain their apparent dimensions when rotated because they are squares.

In any case, viewDidLoad is only called when a view is first initialized, usually from a nib. If you need to make changes to a view when it rotates, you need to make the changes in willRotateToInterfaceOrientation:duration: and/or didRotateFromInterfaceOrientation:.

To change the dimensions of any view, simply reset its frame.

TechZen
Thanks a lot TechZen. These are the two methods I was looking for. Couldn't find them in the docs.
Jack