Iphone 在objC中将箭头UIImage旋转一圈
我正在开发iPad应用程序,在这个应用程序中,我必须通过触摸旋转一个圆圈中的箭头。但我在这方面遇到了问题。问题在于图像必须旋转到的角度计算中 你可以查一下。 我必须围绕圆圈旋转大红色箭头图像。有谁能帮我,如何得到接触点的角度。目前我正在使用下面的代码,我在网上的某个地方找到了它。但它没有将箭头旋转到触碰的地方Iphone 在objC中将箭头UIImage旋转一圈,iphone,objective-c,image-rotation,Iphone,Objective C,Image Rotation,我正在开发iPad应用程序,在这个应用程序中,我必须通过触摸旋转一个圆圈中的箭头。但我在这方面遇到了问题。问题在于图像必须旋转到的角度计算中 你可以查一下。 我必须围绕圆圈旋转大红色箭头图像。有谁能帮我,如何得到接触点的角度。目前我正在使用下面的代码,我在网上的某个地方找到了它。但它没有将箭头旋转到触碰的地方 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *oneTouch = [to
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *oneTouch = [touches anyObject];
CGPoint currentPoint = [oneTouch locationInView:imgCompass];
double current_angle = [self wheelAngleFromPoint:currentPoint];
imgNeedle.transform = CGAffineTransformMakeRotation( current_angle );
}
- (double) wheelAngleFromPoint:(CGPoint)location
{
double retAngle;
// subtract center of wheel
location.x -= (self.imgNeedle.bounds.size.width ) / 2.0;
location.y = (self.imgNeedle.bounds.size.height ) / 2.0 - location.y;
// normalize vector
double vector_length = sqrt(location.x*location.x + location.y*location.y);
location.x = location.x/vector_length;
location.y = location.y/vector_length;
retAngle = acos(location.y);
float offset = 0.28;
//if (location.x)
// offset = 0.28;
retAngle += offset;
if (location.x<0)
{
retAngle = -retAngle;
}
return retAngle;
}
有人能帮我计算正确的角度吗
谢谢问题出在这里:
location.x -= (self.imgNeedle.bounds.size.width ) / 2.0;
location.y = (self.imgNeedle.bounds.size.height ) / 2.0 - location.y;
计算后,位置.x和位置.y中的值应表示从车轮或车轮中心开始的矢量?到了接触点。请尝试以下方法:
location.x = location.x - self.imgNeedle.center.x;
location.y = self.imgNeedle.center.y - location.y;
请注意,由于您正在设置imgNeedle.transform属性,帧将无效,但中心将正常:-imgNeedle将围绕图像中心旋转
请注意,我显式地声明了location.x-self.imgNeedle.center.x以帮助您理解发生了什么-您需要计算两点之间的差值,并在它们之间建立一个向量。你应该理解,在数学中,0,0是原点,x轴向右为正,y轴向上为正。但是,在您的设备屏幕上,您使用的坐标系视图坐标0,0位于左上角,x轴向右为正,而y轴向下为正。这并不总是正确的,因为您可以通过多种方式映射屏幕坐标。这就是为什么location.y减法与location.x减法正好相反——用数学计算角度来解释屏幕垂直翻转的原因。在数学中,正旋转表示逆时针方向的旋转,一个轴上的翻转可以隐藏这一点,使其看起来正角度表示顺时针旋转,就像双负旋转表示正一样,所以当你玩旋转和向量时,你应该把所有这些都考虑进去。然而,出于您的目的,它非常简单,因此,您可能更喜欢使用试错法来处理代码,而不是试图对所有的数学问题绞尽脑汁,例如,您可能需要翻转其中一个方向,更改减法的顺序,甚至更改旋转方向,例如进行2*M_π-重新调整角度。使用一幅360瓷砖的图像。苹果也是这样做的,它提供了更大的灵活性、更好的质量和更简单的编程。是指针移动到了错误的位置,还是根本没有移动?它移动到了错误的位置。意思是针不指向我点击的地方,它指向任何其他地方。科宁·巴尔德!你能更详细地告诉我吗。你的意思是什么?如何实现这一点。谢谢