获取UIView在touchesMoved事件中的旋转方向

4
这可能听起来有点滑稽,但我花了几个小时用UIView和一些三角函数尝试重新创建一个具有逼真旋转的旋钮。我实现了这个目标,但现在我不知道如何确定旋钮是向左旋转还是向右旋转。数学中最相关的部分如下:
- (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);
//进行旋转 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)]; } }
理想情况下,我可以利用一个数字值告诉我旋转是正数还是负数。
2个回答

2

如果您的旋钮中心点是用于旋钮的图像的中心,则应该能够检测到触摸是否从中心左侧/右侧开始并向上/向下移动。如果触摸从左侧开始并向下移动,则正在向左旋转。对于从中心另一侧开始的触摸,相反也是如此。您可以通过在touchesDidMove方法中将连续的x坐标放入数组中并进行简单比较来检测触摸是否向上或向下移动。


0

谢谢Remover。这已经接近我所需的内容,但最终,由于旋钮对象正在将事件传递给一个控制器类,我需要一种从旋转中测量值的方法...例如:340 *表示CClockWise上的94%。无论如何,我最终使用上述方法解决了这个问题,并将currentValue传递给代理。然后,代理将采用该方法及其自己的私有float,比较该值是否高于或低于上次收到的值:


//delegate使用私有值测量上一次回调 #pragma mark UIKnobViewDelegate - (void)dialValue:(float)value { if (lastValue == 0.00) { lastValue = lastValue; } if (value

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接