Question

J'ai un problème d'appliquer une transformation à la couche d'un UIImageView. En utilisant le code ci-dessous, je suis en train de tourner cette aiguille, mais je reçois des copies tirées. J'ai vérifié qu'il n'y a pas d'autre endroit où l'image de l'aiguille est ajoutée et en commentant la addSubview fait ni l'un montre, donc il dessine vraiment deux fois.

L'aiguille à gauche est en position que la vue de l'image doit être démarré à, -20. L'aiguille à droite fonctionne dans l'aspect qu'il tourne et affiche la valeur correcte pour la needleValue. Qu'est-ce que je fais mal pour obtenir double dessine?

text alt

- (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];
}
Était-ce utile?

La solution

Essayez de faire le point d'arrêt à [self addSubview:...] ligne et voir si elle se est appelé deux fois. La variable _needle peut être réglée à zéro ailleurs?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top