2010-03-19 76 views
5

这可能听起来很有趣,但我花了数小时试图重新使用UIView和一些三角现实旋转的旋钮。我达到了目标,但现在我无法弄清楚如何知道旋钮是左旋还是右旋。数学是最相关的部分是在这里:得到UIView的旋转方向touchesMoved

 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint pt = [touch locationInView:self]; 

    float dx = pt.x - iv.center.x; 
    float dy = pt.y - iv.center.y; 
    float ang = atan2(dy,dx); 

    //do the rotation 
    if (deltaAngle == 0.0) { 
     deltaAngle = ang; 
     initialTransform = iv.transform; 
    }else 
    { 
     float angleDif = deltaAngle - ang; 
     CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); 
     iv.transform = newTrans; 
     currentValue = [self goodDegrees:radiansToDegrees(angleDif)]; 
    } 
} 

理想情况下,我可以利用一个数值来告诉我,如果旋转是正还是负。

回答

3

如果您的旋钮的中心点是您用于旋钮的图像的中心,那么您应该能够检测到触摸是从中心的左侧/右侧开始并向上/向下移动。如果触摸从左边开始并向下移动,则向左旋转。反之亦然,在中心的另一边开始触摸。您可以通过在touchesDidMove方法中放置数组中的连续x坐标并进行简单比较来检测触摸是向上还是向下移动。

0

谢谢卸妆。这接近我所需要的,但最终,由于旋钮对象将事件传递给控制器​​类,我需要一种方法来测量旋转的值...即:在CClockWise中,340 *为94%。无论如何,我结束了解决这个使用上面的方法,并将currentValue传递给一个委托。然后委托将采取该方法,并用它自己的私人浮动,比较,如果该值大于收到的最后的值更高或更低:

//代表使用专用值从去年回电 的#pragma标志UIKnobViewDelegate测量(void)dialValue :(浮点)值 if(lastValue == 0.00){ lastValue = lastValue; } if(value

从那里,我们的控制器可以做任何它喜欢的事情