2010-01-31 3 views
0

J'ai mis en place une application et utilisé une partie du code de base de "Le livre de recettes de l'iPhone Developer" pour créer une vue simple. L'application fonctionne correctement en mode portrait, mais quand elle est tournée, les dimensions des boîtes restent les mêmes. Voici mon code:Configurer la vue dans le code qui change avec l'orientation

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

Est-il possible d'avoir cette reload avec les nouvelles dimensions quand il est mis en rotation ou une meilleure façon d'accueillir le changement d'orientation?

Merci JP

Répondre

1

je peux être mal compris votre problème. Par "boîtes", voulez-vous dire les sous-vues?

Si tel est le cas, les sous-vues conservent leurs dimensions apparentes lorsqu'elles sont pivotées car elles sont carrées.

Dans tous les cas, viewDidLoad est appelée uniquement lors de la première initialisation d'une vue, généralement à partir d'une pointe. Si vous devez modifier une vue lors de la rotation, vous devez effectuer les modifications dans willRotateToInterfaceOrientation:duration: et/ou didRotateFromInterfaceOrientation:.

Pour modifier les dimensions d'une vue, il suffit de réinitialiser son cadre.

+0

Merci beaucoup TechZen. Ce sont les deux méthodes que je cherchais. Impossible de les trouver dans les docs. – Jack

1

objet.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

Questions connexes