2008-11-23 7 views
1

J'ai essayé d'avoir deux UIImageviews de taille fixe avec des images sur les images (qui couvrent toute la vue), mais j'ai essayé très dur (j'abandonne!) De faire pivoter chacun de eux d'une manière circulaire. Donc, si j'ai un UIView, et l'autre juste à côté, je voudrais pouvoir faire pivoter le premier (et l'autre immédiatement, pas de trous) le suivant, et tourner de 360 ​​degrés, c'est juste impossible!Rotation de deux UIImageViews 360 degrés

Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

3

Une des premières pièces du code iPhone que j'ai écrit était la suivante pour afficher une horloge, faite de feuilles.

Une horloge est créée à partir de trois feuilles, heures, minutes et secondes, et nous avons une image à une seule feuille, qui est dessinée avec une échelle, une opacité etc. différente, pour donner l'apparence d'une horloge.

L'UIView ci-dessous dessine une horloge au centre de la vue, en utilisant la translation et la mise à l'échelle pour placer les feuilles au bon endroit. Le CTM est sauvegardé et restauré pour sauvegarder les traductions répétées.

Vous voudrez peut-être voir si cela vous aide à gérer les systèmes de coordonnées et à les faire pivoter.

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) 
    { 
     // Initialization code 
     self.minutes = 49; 
     self.seconds = 0; 

     // clear to transparent 
     self.clearsContextBeforeDrawing = YES; 
     self.backgroundColor = [UIColor clearColor]; 

     [self tick:nil]; 
    } 
    return self; 
} 

- (void)tick:(NSTimer *)timer 
{ 
    // get time 
    NSDate * time = [NSDate date]; 
    NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents * comp = [gregorian components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:time]; 

    // update the time 
    self.seconds = [comp second]; 
    self.minutes = [comp minute]; 
    self.hours = [comp hour]; 

    // redisplay 
    [self setNeedsDisplay]; 
} 

- (float)toRadians:(float)deg 
{ 
    return deg * 3.14/180.0; 
} 

- (void)drawClock:(CGPoint)pos hours:(NSInteger)theHours minutes:(NSInteger)theMinutes seconds:(NSInteger)theSeconds 
{ 
    UIImage * leaf = [UIImage imageNamed:@"leaf.png"]; 

    // context 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 

    // save original state 
    CGContextSaveGState(myContext); 

    // set alpha and move it to centre of clock 
    CGContextSetAlpha(myContext, 0.8); 
    CGContextTranslateCTM (myContext, pos.x, pos.y); 

    // save centred state 
    CGContextSaveGState(myContext); 

    // rotate and translate the hour 'hand' 
    CGContextRotateCTM (myContext, [self toRadians:(theHours-3.0+theMinutes/60.0)*360/12.0 - 10]); 
    CGContextTranslateCTM (myContext, -5, -[leaf size].height/12); 

    // draw the hour hand and restore to translated 
    CGContextDrawImage(myContext, CGRectMake(0, 0, [leaf size].width/6, [leaf size].height/6), [leaf CGImage]); 

    // restore centred state and resave 
    CGContextRestoreGState(myContext); 
    CGContextSaveGState(myContext); 

    // rotate and transform the minute 'hand' 
    CGContextRotateCTM (myContext, [self toRadians:((theMinutes-15)*360.0 /60.0) - 10]); 
    CGContextTranslateCTM (myContext, -5, -[leaf size].height/10); 

    // draw the minute hand and restore original context 
    CGContextDrawImage(myContext, CGRectMake(0, 0, [leaf size].width/5, [leaf size].height/5), [leaf CGImage]); 

    // restore centred state 
    CGContextRestoreGState(myContext); 

    // rotate and transform the second 'hand' 
    CGContextSetAlpha(myContext, 0.5); 
    CGContextRotateCTM (myContext, [self toRadians:((theSeconds-15)*360 /60.0) - 10]); 
    CGContextTranslateCTM (myContext, -5, -[leaf size].height/10); 

    // draw the second hand and restore original context 
    CGContextDrawImage(myContext, CGRectMake(0, 0, [leaf size].width/5, [leaf size].height/5), [leaf CGImage]); 
    CGContextRestoreGState(myContext); 
} 

- (void)drawRect:(CGRect)rect 
{ 
    // draw clock in clock view 
    [self drawClock:CGPointMake(rect.size.width/2,rect.size.height/2) hours:self.hours minutes:self.minutes seconds:self.seconds]; 

    // test code for centering hands 
// [self drawClock:CGPointMake(rect.size.width/2,rect.size.height/2) hours:12 minutes:00 seconds:00]; 
} 
Questions connexes