在 UITableView 中用手指在屏幕上绘图
Posted
技术标签:
【中文标题】在 UITableView 中用手指在屏幕上绘图【英文标题】:Drawing in screen with finger in UITableView 【发布时间】:2013-03-08 19:13:43 【问题描述】:我正在关注这个关于在 UIView(子类)层中在屏幕上绘图的优秀小教程。 http://spritebandits.wordpress.com/ 它只是工作。
只有一件事。我将此视图放置为 UITableViewCell 的子视图,它自然地显示为 UITableView 的一部分。 我想当我将它放在 UIScrollView 中时我会遇到同样的问题。 (UITableView 还是继承自 UIScrollView)
只要相关运动是水平的,我的绘画视图就会触发触摸。一旦我稍微垂直移动手指,即使是部分移动,UITableView 就会接管并滚动表格。
当触摸实际上在我的视野内时,是否有任何适当的方法可以停止 Table 以控制触摸?
如果它很重要:我正在使用情节提要。该单元格是一个原型单元格,它有自己的 UITableViewCell 子类。
【问题讨论】:
【参考方案1】:我已经使用您所说的同一类“Canvas”以及在 UITableViewCell 中实现了这一点。但是我并没有使用整个单元格进行绘制,只是 UITableView 内部的一个 UIView 作为子视图。
当 UIView(我允许绘图的单元格的子视图)触发 touchesBegan 或 touchesEnded 时,我通过激活和停用 UITableView 滚动来达到整个用户体验。因此,当他们在 UIView 内触摸/移动时,他们正在绘制。当它在外面时,他们正在滚动。所以他们不能在 UIView 上滚动,因为他们会画画。
您的问题是,由于整个单元格是绘图视图,因此用户无法在此具体单元格中滚动,因为它是绘图单元格。
希望这会有所帮助。
【讨论】:
我的画布子视图也只是该单元格的一部分。单元格中还有其他标签和按钮。 Canvas 视图的所有侧面都将有足够的空间供用户拖动以滚动表格。我尝试了同样的技巧。我追踪了 touchesBegan 何时被解雇。仅当用户侧身移动时才会触发。我不会注意到上下组件的任何运动。您是否使用了一个技巧来解决这个问题? 嗯.. 一件事,如果你点击画布然后上下移动手指,它是滚动还是绘图? (慢慢尝试,先在画布上点按,然后向上或向下滑动一点) 我刚试过。在 touchesBegan 中,我首先爬上 superview 链,直到找到 UITableView 并将 scrollEnabled 设置为 NO。 touchesEnded: 也是一样的。因此,当用户开始垂直绘图时,它可以正常工作。用户可以改变方向并继续绘制。当用户开始绘图但在实际移动手指之前触摸后等待片刻,那么它也可以正常工作。但是当用户开始水平或对角线左右时,表格会滚动。 那么我认为这是因为 touchesBegan 没有被触发,因为第一个手势未被识别为点击,直接是滑动。也许您可以尝试在 UITableView 上捕获这些手势并将该动作发送到 Canvas 方法。我没有尝试过,但这是一个想法。【参考方案2】:对此我没有答案。但基本上有一种解决方法。
您可以让用户进入绘图模式,其中 UItableviewcell 的滚动被禁用,然后
一旦用户完成绘图,您可以再次启用滚动。
在屏幕上的任意位置包含一个按钮将帮助您切换模式。
【讨论】:
谢谢。从技术上讲,这是可行的。但这是否是良好的用户体验?反正。我可以尝试在用户实际绘制某些东西时禁用滚动。但是当用户开始在垂直方向上绘制时,这将不起作用。以上是关于在 UITableView 中用手指在屏幕上绘图的主要内容,如果未能解决你的问题,请参考以下文章