问题标签 [uigesturerecognizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1760 浏览

iphone - 在 CALayer -hitTest 中崩溃:

这个问题真的把我难住了……

我有一个使用 UIPanGestureRecognizer 的 iPad 项目,并且在我的 handlePanGesture 中使用以下方法调用:

一旦我“找到”了一个 AIEnemyUnit 层,我继续拖动,一切正常。除了大约在第 6 到第 10 次“拖动”时,调试器仅在 CALayer -hitTest 深处发生崩溃:

0 投票
3 回答
5617 浏览

iphone - UISwipeGestureRecognizer 手势起始点

是否可以从 UISwipeGestureRecognizer 获取手势起点。就像它是如何可能的

0 投票
8 回答
107641 浏览

ios - UIImageView 上的 UIGestureRecognizer

我有一个UIImageView,我希望能够调整大小和旋转等。

可以UIGestureRecognizer添加到UIImageView?

我想将旋转和捏合识别器添加到UIImageView将在运行时创建的。

如何添加这些识别器?

0 投票
3 回答
8267 浏览

iphone - UITableView 中的 UIGestureRecognizer - 滚动后崩溃?

我有一个带有自定义单元格的 UITableView。每个单元格内有 2 个视图。每个视图都有一个 UIGestureRecognizer 附加来处理点击事件。当点击视图时,我向 UINavigationController 发送一条消息以推送详细视图。在我实际滚动表格之前,这种情况可以正常工作。滚动表格后,当用户点击单元格内的一个视图时,应用程序会崩溃。例如,我可以加载应用程序,单击第二个单元格中的视图,然后将详细视图正确推送到屏幕上。从那里,我导航回表格,滚动到底部,回到顶部,然后点击相同的视图。从那里,应用程序因无法识别的选择器错误而崩溃。这是我的手势设置(在 viewDidLoad 中):

这是调用的方法:

最后,这是我在控制台中得到的堆栈跟踪:

'

编辑:经过一段时间的测试,我确定只有当时在屏幕上可见的视图才会触发事件。其他一切都因上述错误而崩溃。可能与这个未回答的问题有关?

这是我的标头声明(为清楚起见,省略了 iVar 和属性:

0 投票
1 回答
2572 浏览

iphone - 在运行时使用 UIGestureRecognizer 创建 UIImage

我希望能够添加一个特定大小的新 UIImageView,它应该有一些 UIGestureRecognizers 检测 UIImageView 上的触摸。

一个子类 UIImageView 或如何最好地实现这一点?

我希望用户能够在运行时根据需要添加 UIImageViews,然后gestureRecognizer 将允许他们操作视图。

谢谢

0 投票
7 回答
36640 浏览

cocoa-touch - 如何告诉 UIGestureRecognizer 取消现有的触摸?

我有一个UIPanGestureRecognizer用于跟踪UIImageView用户手指下方的对象 ( )。我只关心 X 轴上的运动,如果触摸偏离 Y 轴上对象框架的上方或下方,我想结束触摸。

我拥有确定触摸是否在对象的 Y 范围内所需的一切,但我不知道如何取消触摸事件。翻转识别器的cancelsTouchesInView属性似乎并没有达到我想要的效果。

谢谢!

0 投票
2 回答
3664 浏览

uiview - 基于 UITouch 旋转 UIView

我正在开发一个绘图应用程序。

我希望用户能够在屏幕上“放置”一个形状,然后根据需要移动、调整大小或旋转它。

问题在于旋转。我的移动和调整大小工作正常。

我之前使用相当复杂且内存/处理器密集型的过程来完成此操作,现在我正在尝试改进它。

我已经搜索和搜索,但没有找到与我正在尝试做的类似的答案。

基本上,假设用户在“表面”上放置了一个正方形。然后,他们轻敲它并获得一些把手。他们可以触摸任何地方并平移以移动正方形(已经工作),触摸并拖动调整大小手柄以调整正方形大小(已经工作),或抓住旋转手柄使正方形围绕其中心旋转。

我已经研究过使用 UIBezierPath 绘制正方形,或者只是让它成为我填充的 ​​UIView 的子类。

在任何一种情况下,我都试图旋转 UIView 本身,而不是里面的一些内容。每次我尝试旋转视图时,要么什么都没有发生,要么视图腾出屏幕,要么只旋转一点然后停止。

这是我尝试过的一些代码(这不起作用,我尝试了很多不同的方法):

如果不明显,这里的想法是将视图移动到原点 (0,0),围绕该点旋转,然后将其移回。

如果您想知道,“角度”是正确计算的。我还将上面的代码包装在[UIView beginAnimations:nil context:NULL]/[UIView commitAnimations]块中。

是否可以将 UIView 旋转一个“自定义”数量?我以前看过/做过动画控件旋转的地方,但在这些示例中,控件总是以“方形”结尾(即,它旋转了 1 个或多个完整的圆圈并返回到其起始方向)。

是否可以“实时”执行此旋转以响应 UITouches?我是否需要将正方形绘制为 UIView 图层中的项目并旋转图层?

你知道吗,我之前的工作是由一组线条或UIBezierPaths. 我会将 aCGAffineTransform应用于数据,然后调用 drawRect: 方法,该方法将在自定义 UIView 中重新绘制对象。这个 UIView 将承载相当多的这些项目,所有这些项目都需要在其中一个需要时重新绘制。

因此,我试图通过创建一堆 UIView 子类来提高应用程序的性能,这些子类只会在用户对它们执行某些操作时获得重新绘制的命令。Apple 的 iPad 主题演讲似乎使用 UIGestureRecognizers 来实现这一点,因为您必须使用两根手指来旋转添加的形状。这是要走的路吗?

想法?

谢谢!

0 投票
1 回答
1299 浏览

iphone - 在多个 UIGestureRecognizer 实例之间拆分触摸序列

我正在开发一个支持在表格视图之间拖动项目的 iPhone/iPad 应用程序。由于所有表格都不适合屏幕,我编写了一个自定义UIScrollView,将它们水平放置,并支持分页。

虽然我已经完成了主要的拖放操作,但仍有一些我无法解决的问题。

  1. 在用户选择了要拖动的项目并且正在拖动后,他们无法滚动UIScrollView以找到目的地UITableView

  2. 有时用户会想要同一个表格视图中拖动项目。但是一旦开始拖动,表格视图就不再识别滚动手势。

我尝试了各种不同的选项,包括实现 aUIGestureRecognizerDelegate并允许多个手势识别器同时识别手势。

正如我所见,这个问题源于事件处理指南中的描述:“iOS 将一个或多个手指触摸屏幕识别为多点触控序列的一部分。这个序列从第一根手指触摸屏幕开始,当最后一根手指从屏幕上抬起。”

UIGestureRecognizer实例总是匹配整个序列。就我而言,我想将单个序列拆分为离散的手势——一些触摸识别项目的拖动,而同一序列中的不同触摸应该被识别为滑动或滚动手势。实际上,我希望我的手势识别器能够同时识别,但只能识别不同的触摸。一旦有人将触摸识别为手势的一部分,其他人就应该忽略该触摸。

我还没有找到使用默认UIGestureRecognizer子类连贯地解决所有这些问题的方法,现在我要编写自己的自定义多部分手势识别器。

我宁愿不必——有没有更合适的方法来达到同样的结果?

0 投票
0 回答
1503 浏览

iphone - 在 UIGestures 之后维护 UIView 的框架

我正在开发一个 iPad 应用程序,它将使用 UIGestureRecognizers 来允许用户在屏幕上平移、缩放和旋转对象(UIView 的子类)。

我知道 [UIView frame] 属性在转换完成后无效,因此我试图获取我的 UIGestureRecognizers 的值并自己保留“框架”。

这是我用来尝试的代码(您可能会从 Apple 的示例项目 SimpleGestureRecognizers 中认出很多代码):

由于我注意到旋转有些奇怪,我实现了以下方法来帮助保持准确的旋转值:

无论如何,屏幕上的形状可以平移、缩放和旋转。一切如您所愿,性能良好。

问题是,在用户移动、调整大小和旋转 UIView 后,我想让他们点击它并给他们“手柄”,允许调整大小而不是捏合给出的“正方形”调整大小(即,当你使用捏手势,您可以以相同的比例放大或缩小 x 和 y)。现在,即使使用上面的代码,存储的值也不是很准确。

我使用的“手柄”只是 10x10 的点,它们应该位于 UIView 框架/矩形的每个“边”的每个角落和中间。当我第一次放置一个正方形并在执行其他任何操作之前点击它以获取手柄时,手柄会出现在适当的位置。当我移动、调整大小和旋转对象,然后点击它时,手柄都会从形状上移开一些。它通常似乎约为 20 像素。

UIGestureRecognizer 对象中的值是否不够准确?情况似乎并非如此,因为这些值用于更改屏幕上的对象,这是准确的。

我很确定在搞砸了这么多 UIView 的框架之后,我无法获得真实的表示,但是我的自定义代码中的缺陷在哪里给了我不好的价值?在度数和弧度之间转换时我会失去精度吗?

在相关说明中:Apple 显然有内部代码来跟踪如何绘制已翻译/转换的视图。我当前使用的纯色框已正确移动、缩放和旋转。那么,有什么方法可以访问它们用于显示已翻译/转换后的 UIView 的值?

谢谢!

0 投票
1 回答
710 浏览

iphone - 使用 UIGestureRecognizer 沿 x 轴移动 UIImageView

我有四个 UIImageViews 排成一排,我希望能够将图像从左向右移动。有没有办法将运动限制在 x 轴(沿着图像中心),即只向左和向右移动它们?类似于在 iPhone 的屏幕上移动图标。

我为每个视图添加了一个 UIPanGestureRecognizer,它允许我在屏幕上到处移动它们。

有什么想法吗?