在开发一个游戏,你可以比较一个拼图游戏,我有几个游戏拼图将在表面上相互匹配(后来引用为MainView)。在游戏开始时,瓷砖将被置于IdleView下的MainView下。我用平移手势移动瓷砖。我通过使用轻击手势选择一个贴图,最后我需要能够旋转我使用旋转手势进行的贴图。这导致了一些我设法解决的问题,但是之后我必须将这些图块放在UIScrollView中,因为我必须多次才能够一次显示它们。多UIGestureRecognizer和UIScrollView导致冲突
我做了几个不同的实现,他们都造成了一些问题。我会经历我尝试的不同方法。
接近1潘,点击 - >瓷砖,旋转 - >的MainView
首先,我把水龙头和锅识别在游戏瓷砖和我的主视图旋转手势,因为瓷砖是小执行一个旋转的手势。然后我发生了一个冲突,当我意外地按下另一个瓦片时,我做了旋转手势,然后该瓦片将其解释为一个平移手势。这导致我尝试了一种新方法。
方法2,潘,点击,旋转 - >的MainView
我的第二个方法是把所有手势识别器的的MainView。然后每次识别一个手势,我通过调用CGRectContainsPoint([gameTile frame],gesturePoint)来检查是否在tap和pan手势的位置有一个tile。
然后,在旋转手势前,我检查是否选择了一个贴图,然后调用相应的方法。这很好!但后来我意识到,我必须有一些机制让我可以有更多的贴图,然后才能在整个屏幕上显示。所以我添加了一个UIScrollView,我把它们水平放置,这样所有的都可以被访问。下面我画了一些小图。
---------------------
| |
| |
| |
| Height 370 p |
| |
| MainView |
| |
| |
| |
| |
| |
| |
---------------------
| Height 110 p |
| IdleView |
| UIScrollView |
| |
| |
---------------------
然后,我将GameTiles作为子视图添加到滚动视图,以便他们将滚动视图。然后,他们不再听我的触摸,因为他们不是我的MainView的子视图。所以现在我处于一种僵局,我不知道该怎么做。如果我回到方法1并为UIScrollView设置canCancelContentTouches = NO,我可以移动瓷砖。但是接下来我将再次遇到旋转手势的问题,并且必须执行一些碰撞检测,以便将tile从scrollview移动到mainview。
我已经阅读了很多有关这个问题的不同的帖子,但我还没有能够理解它。
任何人都可以给我一些其他方式的指针,然后是一个UIScrollView,允许我有50块瓷砖不会混淆我的触摸,并仍然允许他们有一个合理的大小,所以我可以使用他们的手势识别器。或者如何平滑地将UIScrollView上的图块移动到MainView上,并且仍然能够旋转图块而不需要平移其他图块。