这可能听起来很有趣,但我花了好几个小时尝试使用UIView和一些trig来重新创建一个具有逼真旋转的旋钮。我实现了目标,但现在我无法弄清楚如何知道旋钮是向左还是向右旋转。数学中最相关的部分是:
- (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)]; } }
理想情况下,我可以利用数值来告诉我旋转是正还是负。
答案 0 :(得分:2)
如果您的旋钮的中心点是您用于旋钮的图像的中心,那么您应该能够检测到触摸是从中心的左/右开始并向上/向下移动。如果触摸从左侧开始并向下移动则向左旋转。反之亦然,从中心的另一侧开始。您可以通过在touchesDidMove方法中将连续的x坐标放在数组中并进行简单比较来检测触摸是向上还是向下移动。
答案 1 :(得分:0)
谢谢卸妆。这接近我需要的,但最后,由于旋钮对象将事件传递给控制器类,我需要一种方法来测量旋转的值...即:在CClockWise中340 *是94%。无论如何,我最终使用上面的方法解决了这个问题,并将currentValue传递给了一个委托。然后委托将采用该方法并使用它自己的私有浮点数,比较该值是否高于或低于收到的最后一个值:
//委托使用私有值来衡量上次回调 #pragma mark UIKnobViewDelegate - (void)dialValue:(float)值 { if(lastValue == 0.00){ lastValue = lastValue; } 如果(价值 从那里开始,我们的控制器可以做任何喜欢的事情