2013-03-26 4 views
0

J'ai une page sur mon application iOS, basée sur le diagramme suivant, qui est la suivante.iOS modifie la mise en page par programmation

  • boîte gris foncé = navbar
  • boîte gris clair = UIView (pour la présentation, avec quelques belles dropshadow etc)
  • Bordure noire = UIView (encore une fois, avec l'ombre agréable, couleur de fond différente, etc.)
  • 2 champs de texte
  • Boîte rose = autre vue à afficher après un événement.

layout

Actuellement, je pose à tout avec initWithFrame, et définissant explicitement le cadre de chaque élément, que je sais est probablement pas grand (je suis nouveau au développement ios, donc s'il vous plaît signaler moi dans la bonne direction). Ce que j'essaye de réaliser est que quand un texte est entré dans le 2ème champ de texte la boîte rose pour indiquer, et les superviews pour répondre correctement, et la disposition joliment autour du nouveau champ.

Je n'ai aucun problème avec l'événement lui-même, et je pourrais facilement changer la frame de chaque UIView à son tour, mais je pense que c'est faux, et j'adorerais quelques pointeurs. Je voudrais également que la boîte rose s'anime, et donc les vues contenant à animer avec elle.

J'espère que je me suis expliqué à fond. Mille mercis

+1

Avez-vous lu [Afficher le guide de programmation pour iOS] (http://developer.apple.com/library/ios/#documentation/windowsviews/conceptual/viewpg_iphoneos/CreatingViews/CreatingViews.html)? L'approche la plus récente est «Gérer les changements de mise en page en utilisant automatiquement les règles d'autosurveillance» et l'universel est «Ajuster manuellement la mise en page de vos vues». –

+0

vous devez implémenter layoutSubviews dans votre sous-classe UIView et définir les cadres de vue là – Felix

+0

Merci @ A-Live, ce document a vraiment aidé. Je l'ai trié avec autoresizesSubviews = YES! – Leon

Répondre

0

Si vous voulez déclencher l'événement et que vous souhaitez ensuite exécuter des animations à l'arrière, c'est très simple.

- (void)myEventMethod:(id)sender { 
    // Do your event stuff here 
    // Animate the pink box into view 
    // The below assumes the pink box is hidden behind the blackView and you'd like to drop it down 44 pixels over 0.3 seconds - hopefully correct - haven't tested 
    // need to be careful as it'll move down 44px every time myEventMethod: is triggered 
    [UIView animateWithDuration:0.3 
         delay:0.0 
         options:UIViewAnimationOptionCurveEaseIn 
        animations:^{ 
        CGRect pinkboxEndFrame = CGRectMake(self.blackView.frame.origin.x, self.blackView.frame.origin.y + 44, self.pinkbox.frame.size.width, self.pinkbox.frame.size.height); 
        [self.pinkbox setFrame:pinkboxEndFrame]; 
        } 
        completion:nil]; 

} 

actualisateurs ci-dessus avec d'autres animations que vous souhaitez faire pour les autres vues.

Pour plus d'informations sur l'animation des vues, vous pouvez consulter le View Programming Guide d'Apple.

Questions connexes