2009-05-17 5 views
0

J'ai sous-classé un UIImageView. AprèsÀ quel point puis-je accéder en toute sécurité au cadre dans une sous-classe UIImageView?

self = [super initWithImage:image] 

J'essaie d'accéder à la valeur self.frame.origin.y. Mais c'est toujours 0.0. Un instant plus tard, dans une méthode qui s'appelle de l'extérieur, la propriété est entièrement là avec une belle 100.0.

J'ai aussi essayé de passer outre - (id) initWithFrame: (CGRect) ARect, mais le résultat est le même. Cette propriété est-elle définie correctement dès que la vue est ajoutée à une vue d'ensemble? Je crois que j'essaie d'obtenir le cadre directement après que l'objet a été alloué et initialisé, mais avant qu'il ne soit ajouté à l'aperçu. Cela arrive une ligne plus tard.

Répondre

1

Je ne peux pas reproduire ce problème, mais je vais avoir à interpoler un peu de deviner où vous attendez 100 à venir . Où est-ce que vous le définissez? Cela semble bien fonctionner:

- (id)initWithImage:(UIImage*)image { 
    self = [super initWithImage:image]; 
    if (self != nil) 
    { 
     CGRect frame = self.frame; 
     frame.origin = CGPointMake(100.0, 100.0); 
     self.frame = frame; 
     NSLog(@"y=%d", self.frame.origin.y); 
     NSLog(@"frame=%@", NSStringFromCGRect(self.frame)); 
    } 
    return self; 
} 

Peut-être que vous pourriez fournir un peu plus grand morceau de code?

+0

J'ai compris que le cadre rect ne sera défini à rien jusqu'à ce que j'ai ajouté la vue nouvellement allouée à une sous-vue. J'ai eu un fournisseur de données qui a créé l'objet, l'a ajouté à un tableau et l'ai renvoyé. À ce stade, aucune propriété frame n'a été définie, car cela sera fait plus tard dans une boucle for-in. – Thanks

3

Le cadre d'un objet peut être établi à tout moment. Si vous souhaitez surveiller les changements au cadre, et passer outre setFrame:setBounds:

- (void)setFrame:(CGRect)frame 
{ 
    [super setFrame:frame]; 
    // Your code here 
} 
- (void)setBounds:(CGRect)bounds 
{ 
    [super setBounds:bounds]; 
    // Your code here 
} 
+0

Merci. Cela aurait été un bon point de sauvegarder le rectangle d'image original, mais il sera appelé dès que je fais des transformations comme la rotation. Quoi qu'il en soit, très utile à savoir! – Thanks

Questions connexes