- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 iOS 棋盘游戏(类似于拼字游戏或单词),其中涉及在屏幕上移动小块,我发现用户有时很难触摸和移动 block ,因为它们太小了。由于游戏的设计,我无法增加图 block 的大小,所以我不得不实现一些小技巧,让用户更容易触摸和移动图 block ,而且效果很好。剩下的唯一问题是用户有时只触及磁贴之外,当用户尝试移动它时,磁贴会停留在原处。
对于如何解决这个问题,我有两个想法......
最佳答案
也许您应该让“板” View 处理所有拖动。当触摸开始并且在该点有一个图 block 时,然后开始拖动它。否则,在触摸移动时检查,一旦找到磁贴,就开始拖动它。
您可以覆盖 hitTest:withEvent:
在板 View 中,以便它仍然可以检测触摸何时触及瓷砖,但始终返回自身,以便触摸事件进入板 View (例如,将被击中的 subview 记录在单独的成员变量中,以便您知道要做什么当触摸事件开始进入时开始拖动)。
更多详情
处理触摸时,UIView 将使用 hitTest 来查找应该接收触摸事件的 View 。默认实现会检查每个 subview ,以便层次结构中的“最深” subview 得到影响。为了让板 View 接收触摸,您必须在所有平铺 View 上禁用 userInteraction。但这意味着您不能使用 hitTest 来查找被触摸的图 block ,因为它忽略了禁用 userInteraction 的 View 。
所以我要说的是在触摸 View 上启用 userInteraction。但是覆盖板 View 上的 hitTest 以便它首先调用 super 实现以查找图 block (如果结果是 self
,则板本身被击中)。无需实现您自己的图 block 搜索。像这样的东西:
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if ( hitView != self )
self.draggingTile = hitView;
return self;
}
touchesMoved
.但是,我认为在触摸移动时不会调用 hitTest,因此如果尚未拾取任何图 block ,您可能必须手动调用它(您可以从传递给的触摸中获取
point
和
event
touchesMoved
。
关于iphone - 如何在 iOS 设备上滑动手势期间 "catch" subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4430995/
我是一名优秀的程序员,十分优秀!