我正在处理的应用程序需要4px的条形高度和全屏尺寸宽度。我需要能够选择这个4px条并移动它。我也无法改变这个条的大小,它的高度必须是4px。
如果我没有使用OpenGL创建对象,这不会是一个大问题。 OpenGL显然没有自己的选择功能,所以我需要自己编程。
最初在研究之后,我建立了一个颜色选择器来识别物体。我的颜色选择器的工作原理是x
和y
我的手指触摸从touchesBegan:
返回的是我从OpenGL视图的屏幕截图中抓取的像素。这个问题是手指位置根本不准确。如果我使用鼠标它完美...
我决定循环选择x
和y
的缓冲区,但不幸的是,当OpenGL视图存储在内存中并且缓冲区返回几个时,OpenGL视图的屏幕截图会对图像进行抗锯齿处理。我的物体颜色的阴影。我可以做一个比较颜色的查找,看看它是否在颜色范围内,但这似乎过于复杂,我已经不得不做多少。加上缓冲区的循环并不快。
我也想过也许只记得我的线在屏幕上的位置,如果我的手指靠近那个位置,就知道那是我要选择的那个并移动它。
这个应用程序的未来最多可以有4行,所以,我想要更安全的东西,然后只知道它在内存中的位置。
有什么更好的方法来处理小物体的选择?
答案 0 :(得分:2)
如何为四个对象维护一组帧,但是将高度扩展到更易于管理的(8px或更大)?然后,可以将较大区域内的触摸与阵列进行比较(使用CGRectContainsPoint)。如果你得到一个命中,然后在开始拖动之前“捕捉”较小(4px)矩形的中心点。
我通过维护拖放的“放置目标”列表来做这样的事情。 drop,当它变得非常接近时它会捕捉到drop目标。不知道我是否很好地传达了这个想法,但它应该有效。
如果四个4px矩形将连续或非常靠近,您必须能够使所选择的一个突出或者用户无法分辨它们正在拖动 - 但是你可以做到这一点,让它变大(可能是6-8像素),然后把它带到前面,这样它就覆盖了邻近的邻居。
我想是一个想法而不是一个答案。
答案 1 :(得分:1)
约翰,
我建议采用不同的方法。正如您所发现的,iOS中的触摸非常不精确。 Apple通常建议您的控件的“点击框”至少为40x40点。我已经小到30x30点,但开始变得很难。
我建议您做的是将代码分解,以便应用程序知道该行的位置,并将其作为逻辑对象进行跟踪。然后在您的触摸处理程序中,根据您希望用户能够移动的事物周围的大“缓冲区”来解释触摸。如果你只有一个水平条,这应该很好。你会遇到麻烦的地方是你有多个细长的水平条,它们靠得很近。在这种情况下,您可能需要重新考虑您的应用程序设计并找到解决问题的另一种方法。
对于实现细节,您可以向OpenGL视图添加平移手势识别器,并让它通知触摸和拖动操作的OpenGL视图。然后,您的OpenGL视图可以使用有关可拖动对象的位置的知识来决定如何解释这些触摸。