2011-01-28 3 views
0

J'ai rencontré un problème qui me rend fou ... Je sais que ce doit être une solution simple, mais je ne trouve rien en ligne (mais peut-être regarder dans les mauvais endroits).UIView origine dans subview

J'ai un tas de boutons que je place dans la vue avec une boucle:

//make the button smaller and position 
     CGRect buttonFrame = button.frame; 
     buttonFrame.size = CGSizeMake(41, 41); 
     buttonFrame.origin = CGPointMake(10+(43*i), 415); 
     button.frame = buttonFrame; 

Ce fonctionnait très bien ... mais maintenant je veux les ajouter dans une autre vue et ils disparaissent. La ligne incriminée de code est:

buttonFrame.origin = CGPointMake(10+(43*i), 415); 

Je crois que cela doit travailler hors des coordonnées de self.view et non la nouvelle sous-vue qui contient les boutons. Ai-je besoin d'un nouveau CGContext pour la super vue?

J'ai essayé quelque chose comme:

buttonFrame.origin = [newView CGPointMake(10+(43*i), 415)]; 

Mais qui a causé toutes sortes d'erreurs.

Merci pour votre temps!

Répondre

1

L'origine du CGRect affecté en tant qu'image d'une vue est le décalage auquel la vue sera placée à partir de sa vue d'ensemble. Par conséquent, si vous utilisez un CGRect de (100, 100, 200, 200), la vue sera de 100 pixels à droite de l'origine et de 100 pixels au sud (rappelez-vous également que l'origine du système de coordonnées de la vue iOS est le coin supérieur gauche) et a une taille de 200x200.

Votre bouton aura 415 pixels au-dessous de l'origine locale (coin supérieur gauche) de sa vue d'ensemble, ce qui peut la placer hors de vue.

+0

Merci beaucoup, c'est douloureusement évident. J'ai besoin de plus de sommeil. –

+0

En outre, pensez à utiliser d'autres fonctions de confort de Core Graphics, comme 'CGRectInset', qui retourne un nouveau' CGRect' plus petit (ou plus grand) d'une quantité donnée que celle que vous fournissez, et 'CGRectOffset', qui retourne un nouveau 'CGRect' qui est en décalage d'une quantité donnée à partir du' CGRect 'fourni. Ils ne font rien de fondamentalement différent que le code que vous avez montré, mais aident souvent avec la clarté (particulièrement utile quand bas sur le caffiene). – jlehr

0

buttonFrame.origin = [newView CGPointMake (10+ (43 * i), 415)]; - cette ligne de code n'a pas de sens, car CGPointMake est la fonction C, et non la méthode ObjectiveC, donc vous ne pouvez pas la publier comme le message à objecter. Si vous souhaitez ajouter une sous-vue, vous devez utiliser [newView addSuview: button]; et assurez-vous que vous avez ajouté votre vue à une autre vue.

Questions connexes