2013-09-05 5 views
2

Pourquoi UIImageView ne tourne pas?pourquoi UIImageView ne tourne pas?

J'ai besoin de restituer des segments autour du cadre central, mais il ne tourne pas.

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     _baseImage = [UIImage imageNamed:@"setAlarmSegment.png"]; 
     _segmentCircleArray = [[NSMutableArray alloc] initWithCapacity:16];  
     for (int i=0; i<16; i++) { 
      UIImageView *imageViewSegment = [[UIImageView alloc] initWithImage:_baseImage]; 
      [imageViewSegment setFrame:self.frame]; 
      imageViewSegment.transform = CGAffineTransformMakeRotation((M_PI*2/16.0f)*i); 
      [_segmentCircleArray addObject:imageViewSegment]; 
     } 
     self.backgroundColor = [UIColor colorWithWhite:0 alpha:0];  
    } 
    return self; 
} 


- (void)drawRect:(CGRect)rect 
{ 
    for (UIImageView *segment in _segmentCircleArray) { 
     [segment drawRect: rect]; 
    } 
} 

merci.

Répondre

1

Ce n'est pas comme ça que vous dessinez Cocoa/Cocoa Touch. Vous ne laissez pas les vues d'images flotter dans une hiérarchie de vue, puis leur envoyez un message drawRect. Les vues d'image ne sont pas conçues pour dessiner, sauf si elles font partie d'une hiérarchie de vue.

Vous devez ajouter vos vues d'image en tant que vues secondaires de votre vue principale, puis le système prendra soin de les dessiner pour vous.

En général, vous voulez éviter d'utiliser drawRect dans Cocoa/Cocoa Touch si possible. Cela finit par être une façon très lente de dessiner.

Si vous êtes déterminé à utiliser drawRect, vous devez créer un tableau d'images et non des vues d'image. Ensuite, vous dessinez chacun à tour de rôle en utilisant drawAtPoint ou drawInRect. Vous devrez probablement enregistrer le contexte graphique, puis appliquer la rotation au contexte actuel avant de dessiner chaque image, puis restaurer le contexte graphique.

+0

Merci beaucoup! Maintenant, je vais lire la référence. – setixela