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?
- (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];
}
Ich fühle mich wie ein Idiot für das nicht versuchen, dies früher ... Ich habe nur Code-Inspektion verwendet. – coneybeare