Frage

Ich habe ein Problem, das eine Transformation in eine UIImageView -Ebene anwendet. Mit dem folgenden Code versuche ich, diese Nadel zu drehen, aber ich erhalte doppelte Kopien. Ich habe überprüft, ob es keinen anderen Ort gibt, an dem das Nadelbild hinzugefügt wird, und das Aussagen des addSubview lässt weder eine auftauchen, also zeichnet es definitiv zweimal.

Die Nadel links ist in der Position, in der die Bildansicht gestartet werden sollte, -20. Die Nadel rechts funktioniert in dem Aspekt, den sie dreht und den richtigen Wert für die zeigt needleValue. Was mache ich falsch, um doppelte Zeichnen zu bekommen?

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];
}
War es hilfreich?

Lösung

Versuchen Sie, den Haltepunkt in der Linie zu machen [self addSubview:...] Und sehen Sie, ob es zweimal angerufen wurde. Das _needle Variable könnte woanders auf Null gesetzt werden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top