旋转UIImage固定角度转动

时间:2012-12-19 15:58:24

标签: objective-c ios

我有一个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;
} 

我如何获得该结果?

1 个答案:

答案 0 :(得分:1)

查找每步所需的弧度数,例如如果你想要4个位置,那么每个位置将比最后一个位置多3.14 / 4弧度。调用此radIncrement。

此行之后

totalRadians = fmod(totalRadians, 2*M_PI);

将totalRadians除以radIncrement,将结果四舍五入为整数值,然后再乘以radIncrement。您可以更改舍入行为,以便在更改位置时进行调整。