gpt4 book ai didi

iphone - 使用 UIImageView 和 CGAffinetransform 绘制的重复图层

转载 作者:行者123 更新时间:2023-12-03 21:09:32 27 4
gpt4 key购买 nike

我在将转换应用于 UIImageView 的图层时遇到问题。使用下面的代码,我尝试旋转这根针,但我绘制了重复的副本。我已经检查过没有其他地方添加针图像,并且注释掉 addSubview 不会让任何一个都出现,所以它肯定是绘制了两次。

左侧的针位于 ImageView 应开始的位置,-20。右侧的针在旋转方面工作并显示 needleValue 的正确值。我做错了什么导致重复抽奖?

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];
}

最佳答案

尝试在 [self addSubview:...] 行下断点,看看它是否被调用了两次。 _needle 变量可能在其他地方设置为 nil?

关于iphone - 使用 UIImageView 和 CGAffinetransform 绘制的重复图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com