gpt4 book ai didi

ios - 如何使用 UIPanGestureRecognizer 旋转图像

转载 作者:行者123 更新时间:2023-11-28 21:40:43 26 4
gpt4 key购买 nike

好吧,这似乎很容易,但我已经花了几个小时来尝试做到这一点。我正在尝试开发一个圆形控件,带有图像和旋转控件,就像大型音响设备的音量控制一样。然后为了旋转图像,我使用了 UIPanGestureRecognizerATAN2

使用图像的中心如 0,0 坐标,以及图像的原点和大小来测量我的 Action 区域。从图像中心(我的 0,0)计算 X 和 Y 的角度后。如果 Touch 超出了图像的边界,什么也不做,但如果在图像内部,我想旋转它,但是,仍然没有工作。编辑:我不想在此过程中使用两根手指,我只需要使用一根手指。

UIRotateGestureRecognizer 使用了两个,这里可以采用这种方式。

这是我的代码:

@property (strong, nonatomic) IBOutlet UIImageView *myMainIndicatorRoulett;

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanWithGestureRecognizer:)];
[self.myTestView addGestureRecognizer:panGestureRecognizer];

_myMainIndicatorRoulett.image = [TheColoristImages imageOfColorIndicatorWithIndicatorAngle:(CGFloat)90.0];

}



-(void)handlePanWithGestureRecognizer:(UIPanGestureRecognizer *)panGestureRecognizer
{
double a1;
double a2;

a1 = [panGestureRecognizer locationInView:self.view].x;
a2 = [panGestureRecognizer locationInView:self.view].y;

double b1;
double b2;

b1 = _myMainIndicatorRoulett.frame.origin.x;
b2 = _myMainIndicatorRoulett.frame.origin.y;

double c1;
double c2;

c1 = b1 + _myMainIndicatorRoulett.frame.size.width;
c2 = b2 + _myMainIndicatorRoulett.frame.size.height;

if ((a1 > b1) && (a1 < c1) && (a2 > b2) && (a2 < c2))
{
double Cx;
double Cy;
Cx = _myMainIndicatorRoulett.center.x;
Cy = _myMainIndicatorRoulett.center.y;

double Tx;
double Ty;
Tx = [panGestureRecognizer locationInView:self.view].x - Cx;
Ty = [panGestureRecognizer locationInView:self.view].y - Cy;
double myAngle = atan2(Ty, Tx);

_myMainIndicatorRoulett.transform = CGAffineTransformRotate(_myMainIndicatorRoulett.transform, myAngle * 3.14 / 180);
}
}

最佳答案

你的问题在最后一行:

_myMainIndicatorRoulett.transform = CGAffineTransformRotate(_myMainIndicatorRoulett.transform, myAngle * 3.14 / 180);

当您使用 CGAffineTransformRotate(s, a) 时,它会添加该角度,而不是设置它。这就是它变得疯狂的原因。每次调用该函数时,它都会将“myAngle”度数添加到旋转中,使其看起来像是在旋转。你想设置角度。

你想用这个:

_myMainIndicatorRoulett.transform = CGAffineTransformMakeRotation(myAngle);

关于ios - 如何使用 UIPanGestureRecognizer 旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32175588/

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