【问题标题】:Drag along a path in Iphone沿着 Iphone 中的路径拖动
【发布时间】:2012-10-01 13:23:19
【问题描述】:

我有一张图片。我想沿着路径拖动该图像。路径可以是圆形或矩形。如果图像被触摸和拖动,它应该只沿着路径移动,而不应该离开路径。我曾尝试使用 Core Graphics 和 Core 动画,但找不到正确的方法。我在网上搜索过,但它总是显示如何沿路径移动对象。找不到有关沿路径拖动对象的任何信息。我还发现他们不是 Apple 提供的从 UIBezierPath 中提取点的方法。

他们会这样做吗?

【问题讨论】:

  • 为什么这个问题被标记为Android? Core-Graphics 或 Core-Animation 均不适用于 Android。由于 API 不同,您可能无法获得与这两个平台匹配的单一答案。
  • 对不起。我已经编辑过了。只是太好奇了。
  • 用户是沿着相同的路径拖动还是只是在屏幕上拖动?
  • 只是沿着圆形路径拖动。
  • 您需要在这里进行一些自定义数学运算,以检测路径中的哪个点距离用户当前触摸的点最近,并相应地更新图像的位置。只要您将问题限制为圆形或矩形路径,这应该很容易管理。在大多数情况下,CoreAnimation 不会有帮助,因为您应该在用户手指触摸移动时不断更新和刷新图像位置。例外情况是当用户触摸移动导致最近的路径点“跳”到路径上的另一个位置时。

标签: iphone xcode4 core-animation core-graphics


【解决方案1】:

UIBezierPath 类有一个名为- (BOOL)containsPoint: 的实例方法。使用此方法和 2 个UIBezierPaths,您可以检查您的对象是否沿路径移动。

+---------+
|xxxxxxxxx|
|x+-----+x|
|x|     |x|
|x|     |x|
|x|     |x|
|x+-----+x|
|xxxxxxxxx|
+---------+

这里的技巧是使 1 条路径比第一个路径略小(可能 2 个像素),同时确保两条路径具有共同的中心。您的对象现在必须经过的路径/路线将是贝塞尔路径区域的差异,您可以通过调用 - (BOOL)containsPoint: 获得。

如果您的对象包含在大UIBezierPath 中,但不包含在小对象中,那么您就知道您在正确的路径上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2010-10-27
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多