我有一个UIImage,我希望用户能够旋转它就像是保险箱的转动按钮一样。我不希望图像在0 <0的范围内以任何角度转动。 x&lt; 360,但我希望车轮(UIImage)停在其中一个固定点上,这些固定点会发生变化(通常为0到20)。例如,如果我有3个选项,则用户将能够转动方向盘并将指针放在三个点上(在这种情况下,角度为:60,120,180)。 我使用此代码来旋转图像:
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
int len = [allTouches count]-1;
UITouch *touch =[[allTouches allObjects] objectAtIndex:len];
CGPoint location = [touch locationInView:[self.SplashItGroupPicker superview]];
float theAngle = atan2( location.y-self.SplashItGroupPicker.center.y, location.x-self.SplashItGroupPicker.center.x );
int totalRadians = -3.14;
totalRadians += fabs(theAngle - totalRadians);
totalRadians = fmod(totalRadians, 2*M_PI);
[self rotateImage:totalRadians];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
}
-(void) rotateImage:(float)angleRadians{
self.SplashItGroupPicker.transform = CGAffineTransformMakeRotation(angleRadians);
CATransform3D rotatedTransform = self.SplashItGroupPicker.layer.transform;
self.SplashItGroupPicker.layer.transform = rotatedTransform;
}
我如何获得该结果?
答案 0 :(得分:1)
查找每步所需的弧度数,例如如果你想要4个位置,那么每个位置将比最后一个位置多3.14 / 4弧度。调用此radIncrement。
此行之后
totalRadians = fmod(totalRadians, 2*M_PI);
将totalRadians除以radIncrement,将结果四舍五入为整数值,然后再乘以radIncrement。您可以更改舍入行为,以便在更改位置时进行调整。