gpt4 book ai didi

iphone - 旋转拨盘 - 旋转限制

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:44 25 4
gpt4 key购买 nike

我正在制作一部老式手机并获得了一个有效的起始代码,用户将手指移到 UIImageView 数字上并旋转拨号。然后它将其移回原始位置。查看屏幕截图。

enter image description here

我似乎想不通的三个问题是;

  1. 如何限制用户只能顺时针旋转?目前用户可以在任何方向(顺时针和逆时针)移动它

  2. 如何检测用户选择的号码?意思是用户触摸了 1 或 3 或 5?我需要此信息,以便当该数字到达右侧的栏时我可以停止旋转。

  3. 在我当前的代码中,当我停止旋转并放开圆圈时,它会通过逆时针向后移动回到原位。如果我选择 1、2、3、4,它会很好地工作,但对于任何数字 5 及以上,刻度盘顺时针移动回到其原始位置。如何在 touchesEnded 上强制逆时针运动?

最佳答案

假设您正在谈论这个手势:

Rotary Dial Source .


构建单点触摸旋转手势识别器。正确构建手势识别器后,您可以只查看旋转并了解如何使用旋转垫。

在构建单点触控旋转手势识别器时,您需要考虑几件事情。如果您查看 UIRotationGestureRecognizer,它使用两个触摸之间的连接(由两个手指支持)来导出当前角度,然后将该角度与先前的角度(从较早的触摸更改事件中导出)进行比较,以查看三角洲。

测量当前角度

需要两点才能形成一条线,而您需要一条线才能知道角度。如果您只使用一次触摸,则需要一个 anchor 。有多种方法可以将 anchor 发送到您的手势识别器,并且由于您可能要构建自定义类,因此请使用委托(delegate)。

累积旋转计数

如果您只是记下角度并在触摸变化期间发送消息,它有时会起作用。但是,如果您想实现滞后(例如,此旋转转盘只会顺时针旋转一次,然后会收紧),则需要累计顺时针和逆时针方向的旋转次数。

幸运的是,您可以假设 a) 触摸事件不会过于频繁地丢失,并且 b) 只需将当前角度与过去的角度进行比较,看看它们是否跨越象限边界就足够了。

例如:

  • 如果触摸从左上象限移动到右上象限,则旋转计数加一。
  • 如果触摸从右上象限移动到左上象限,则从旋转计数中减去 1。

(是的,这确实有效。)

发出正确的累积旋转

如果您想像 UIRotationGestureRecognizer 那样发出旋转信息,您将跟踪四件事。

  1. 起始角度:从 anchor 到起始触摸的连接与从 anchor 到固定引用点的连接之间的角度。
  2. 当前角度:从 anchor 到当前触摸的连接与从 anchor 到固定引用点的连接之间的角度。
  3. Rotation Count:顺时针旋转的次数是通过不断比较 Current Angle 的当前值与其上一个值(如上一节所述)得出的。如果触摸逆时针移动,则此计数将为负数。

您将提供Rotation Count * 2_PI + (Current Angle - Starting Angle)作为旋转。

关于iphone - 旋转拨盘 - 旋转限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13790042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com