Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在objC中将箭头UIImage旋转一圈_Iphone_Objective C_Image Rotation - Fatal编程技术网

Iphone 在objC中将箭头UIImage旋转一圈

Iphone 在objC中将箭头UIImage旋转一圈,iphone,objective-c,image-rotation,Iphone,Objective C,Image Rotation,我正在开发iPad应用程序,在这个应用程序中,我必须通过触摸旋转一个圆圈中的箭头。但我在这方面遇到了问题。问题在于图像必须旋转到的角度计算中 你可以查一下。 我必须围绕圆圈旋转大红色箭头图像。有谁能帮我,如何得到接触点的角度。目前我正在使用下面的代码,我在网上的某个地方找到了它。但它没有将箭头旋转到触碰的地方 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *oneTouch = [to

我正在开发iPad应用程序,在这个应用程序中,我必须通过触摸旋转一个圆圈中的箭头。但我在这方面遇到了问题。问题在于图像必须旋转到的角度计算中

你可以查一下。 我必须围绕圆圈旋转大红色箭头图像。有谁能帮我,如何得到接触点的角度。目前我正在使用下面的代码,我在网上的某个地方找到了它。但它没有将箭头旋转到触碰的地方

- (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瓷砖的图像。苹果也是这样做的,它提供了更大的灵活性、更好的质量和更简单的编程。是指针移动到了错误的位置,还是根本没有移动?它移动到了错误的位置。意思是针不指向我点击的地方,它指向任何其他地方。科宁·巴尔德!你能更详细地告诉我吗。你的意思是什么?如何实现这一点。谢谢