1

我正在处理的应用程序需要 4 像素的条形高度和全屏尺寸宽度。我需要能够选择这个 4px 条并移动它。我也不能改变这个栏的大小,它的高度必须是 4px。

如果我不使用 OpenGL 创建对象,这将不是什么大问题。OpenGL 显然没有自己的选择功能,所以我需要自己编程。

最初经过研究,我构建了一个颜色选择器来识别对象。我的颜色选择器是如何工作的xy我的手指触摸返回的touchesBegan:是我从 OpenGL 视图的屏幕截图中抓取的像素。问题在于手指的位置根本不精确。如果我用鼠标,它就完美了……

我决定可能循环通过选定的缓冲区xy但不幸的是,当 OpenGL 视图的屏幕截图存储在内存中并且缓冲区返回我的对象​​颜色的几种阴影时,图像会发生抗锯齿。我可以做一个比较颜色查找,看看它是否在颜色范围内,但这似乎过于复杂,因为我已经做了多少。另外,通过缓冲区骑自行车并不快。

我也想过也许只是记住我的线条在屏幕上的位置,如果我的手指靠近那个位置,就知道那是我想要选择并移动它的那个位置。

这个应用程序的未来最多可以有 4 行,就像这样,我想要更安全的东西,而不是只知道它在内存中的位置。

有什么更好的方法来处理小对象的选择?

4

2 回答 2

2

如何为四个对象维护一组框架,但将高度扩展到更易于管理的高度(8px 或更大)?然后,可以将较大区域内的触摸与数组进行比较(使用 CGRectContainsPoint)。如果命中,则在开始拖动之前“对齐”较小 (4px) 矩形的中心点。

我通过维护拖放的“放置目标”列表来做类似的事情,当它非常接近时它会捕捉到放置目标。不知道我是否很好地传达了这个想法,但它应该可以工作。

如果四个 4px 矩形将是连续的或非常靠近的,您必须能够使所选的一个突出,否则用户将无法分辨他们正在拖动哪个 - 但您可以这样做通过使其更大(可能是 6-8 像素)然后将其带到前面,使其覆盖其相邻的邻居。

我猜更多的是一个想法而不是一个答案。

于 2013-04-18T21:40:10.537 回答
1

约翰,

我会建议一种不同的方法。正如您所发现的,iOS 中的触摸非常不精确。Apple 通常建议您的控件的“命中框”至少为 40x40 点。我已经小到 30x30 点,但这开始变得很难。

我建议你做的是考虑你的代码,以便应用程序知道该行在哪里,并将其作为一个逻辑对象进行跟踪。然后在您的触摸处理程序中,根据您希望用户能够移动的东西周围的大“缓冲区”来解释触摸。如果你只有一个单杠,这应该很好用。如果您有多个靠近在一起的细水平条,则会遇到麻烦。在这种情况下,您可能需要重新考虑您的应用程序设计并找到解决问题的另一种方法。

至于实现细节,您可以将平移手势识别器添加到您的 OpenGL 视图中,并让它通知 OpenGL 视图触摸和拖动操作。然后,您的 OpenGL 视图可以使用有关可拖动对象所在位置的知识来决定如何解释触摸。

于 2014-06-04T20:06:01.460 回答