2010-11-18 7 views
2

Ich habe ein Problem beim Anwenden einer Transformation auf die Ebene eines UIImageView. Mit dem unten stehenden Code versuche ich, diese Nadel zu drehen, aber ich bekomme doppelte Kopien. Ich habe überprüft, dass es keinen anderen Ort gibt, an dem das Nadelbild hinzugefügt wird, und das Auskommentieren der addSubview macht keinen von beiden sichtbar, so dass es definitiv zweimal gezeichnet wird.Doppelte Ebenen, die mit UIImageView und CGAffinetransform erstellt wurden

Die linke Nadel befindet sich in der Position, in der die Bildansicht beginnen soll, -20. Die rechte Nadel funktioniert in dem Aspekt, dass sie sich dreht und den korrekten Wert für die needleValue anzeigt. Was mache ich falsch, um doppelte Ziehungen zu erhalten?

alt text

- (UIImageView *)needle { 
if (_needle == nil) { 
    UIImage *image = [UIImage imageNamed:@"needle.png"]; 
    self.needle = [[[UIImageView alloc] initWithImage:image] autorelease]; 
    [_needle sizeToFit]; 
    [_needle setFrame:CGRectMake(floor((self.width - _needle.width)/2), 
      self.height - _needle.height + 68, // this - offset comes from the lowering of the numbers on the meter 
      _needle.width, _needle.height)]; 
    _needle.contentMode = UIViewContentModeCenter; 
    _needle.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin; 
    _needle.autoresizesSubviews = YES; 

    // CALayer's transform property is a CATransform3D. 
    // rotate around a vector (x, y, z) = (0, 0, 1) where positive Z points 
    // out of the device's screen. 
    _needle.layer.anchorPoint = CGPointMake(0.05,1); 

    [self addSubview:_needle]; 
} 
return _needle; 
} 



- (void)updateNeedle { 
[UIView beginAnimations:nil context:NULL]; // arguments are optional 
[UIView setAnimationDuration:VU_METER_FREQUENCY]; 
CGFloat radAngle = [self radianAngleForValue:needleValue]; 
self.needle.transform = CGAffineTransformMakeRotation(radAngle); 
[UIView commitAnimations]; 
} 

Antwort

2

Try Haltepunkt an der Linie [self addSubview:...] und sieht zu machen, wenn es zweimal aufgerufen wurde. Die _needle Variable könnte sonst nirgends auf Null gesetzt werden?

+0

Ich fühle mich wie ein Idiot für das nicht versuchen, dies früher ... Ich habe nur Code-Inspektion verwendet. – coneybeare

Verwandte Themen