我正在尝试制作一个使用径向拨号的应用。作为示例,径向拨号功能在此应用程序中可用
http://itunes.apple.com/us/app/kitchen-dial/id448558628?mt=8&ign-mpt=uo%3D4
我想问的是我应该用什么方法来实现这个目标?伙计们,我不是要求你为我编写代码我要问的是这是如何在概念上完成的?我的意思是当用户在屏幕上向左/向右旋转时,它如何知道要移动哪个径向刻度盘以及在哪个方向上移动。我确信有多个按钮,这里有一些图像转换。我需要理解制作这样一个东西的概念。如果有人知道或做过类似的事情,请分享您的想法。 apple有一个示例代码吗?谢谢。
答案 0 :(得分:2)
核心概念是:
能够围绕中心点旋转图像。
能够在给定x,y坐标的情况下计算相对于中心点的角度。
所以,移动方向盘:
注册方向盘上的按钮水龙头:
你要求对这些概念进行高级别的解释 - 这就是它。
答案 1 :(得分:1)
这是一个复杂的问题。简单的答案是:使用平移手势识别器,使用:
- (void)panBegan:(UIPanGestureRecognizer *)pan {
CGRect frame = [self frame];
_central = CGPointMake(frame.origin.x+frame.size.width/2, frame.origin.y+frame.size.height/2);
CGPoint p = [pan locationInView:[self superview]];
p.x -= _central.x;
p.y -= _central.y;
_angle = atan2(p.x, p.y);
}
- (void)panMoved:(UIPanGestureRecognizer *)pan {
CGPoint p = [pan locationInView:[self superview]]];
p.x -= _central.x;
p.y -= _central.y;
CGFloat deltaAngle = _angle - atan2(p.x, p.y);
self.transform = CGAffineTransformMakeRotation(deltaAngle + _finalAngle);
}
其中_angle是平移初始触摸的角度,_finalAngle是前一平移结束时保存的角度。
但是:UIPanGestureRecognizer有一个力度属性,你应该在平底锅的末端使用它来继续旋转,就像表盘有惯性一样。并且,如果表盘具有一组固定的合法停止位置,那么您必须调整减速曲线,使其在合法停止时停止。并且,如果您为减速度设置动画,并且用户在前一个完成之前启动新的平移,则必须根据感知位置而不是存储位置调整_finalAngle。
答案 2 :(得分:0)
以下是开源旋钮的列表,因此您可以查看代码并查看所涉及的内容: