iOS 上 OpenFeint 滚动视图中的触摸问题
Posted
技术标签:
【中文标题】iOS 上 OpenFeint 滚动视图中的触摸问题【英文标题】:Problems with touches in OpenFeint scroll views on iOS 【发布时间】:2011-04-19 02:38:46 【问题描述】:我一直在到处寻找和询问,到目前为止无济于事。我有一个游戏,我正在将 OpenFeint 放入其中,并且我在 OpenFeint 的仪表板中遇到了滚动视图的问题。排行榜和成就(以及其他当前不相关的)有滚动视图,在它们中的每一个中,都可以滚动,但就好像它永远不会获得任何触摸结束事件。当你放手时,内容会保持原样,即使它在视图之外 - 它不会反弹。当您再次触摸时,它会立即跳回,并且可以再次滚动。
由此引起的更大问题是,您通常无法在滚动视图中选择任何内容(我猜它们是通过触摸结束事件选择的)。我可以用两根手指和大量敲击的组合来选择东西,但实际上它不起作用。而且我知道这是我的应用程序的错,因为它在示例应用程序中运行良好。
相关细节:该应用程序使用 SDL(来自 1.3 的 git 快照,我必须自己编译并且可以提供任何相关源)、OpenGL,并且几乎完全是 C++。我正在使用 OpenFeint 2.10(最新)、XCode 4.0.2(最新)和 ios 4.3.2(在模拟器中;在我的实际设备上版本稍旧)。我想我做到了,所以在 OF 仪表板启动时游戏不会检查事件,以防万一出现问题,但要么我失败了,要么没有效果。
这是模拟器中卡住的滚动视图的屏幕截图: (来源:happyspork.com)
【问题讨论】:
【参考方案1】:虽然this tutorial 用于将 Cocos2D 与 Openfeint 集成,但它解决了 OpenFeint 仪表板的输入出现乱码的类似问题:
特别注意dashboardDidAppear 和dashboardDidDisappear 方法。你会 看到我们暂时暂停了 Cocos2D 导向器,然后在 仪表板消失。这是一个关键步骤,否则输入可能会 显示仪表板时不一致甚至未捕获。但是通过暂停 导演,我们确保所有用户输入都被仪表板捕获。
我不知道 SDL 是否有类似的“暂停”功能,但以类似的方式调用它可能会解决您的问题。
以下是该示例中的相关代码:
- (void)dashboardDidAppear
[[Director sharedDirector] pause];
[[Director sharedDirector] stopAnimation];
- (void)dashboardDidDisappear
[[Director sharedDirector] resume];
[[Director sharedDirector] startAnimation];
【讨论】:
嗯,SDL 的工作方式不同;您可以使用 SDL 创建自己的事件循环,它只会在您要求时对事件执行任何操作。但是,由于 Cocoa 的工作方式,整个应用程序在一个事件中运行,因此除非您调用 CFRunLoopRunInMode 函数(当您请求事件时 SDL 会这样做),否则无法处理其他事件。这有点令人困惑。无论如何,我认为这无济于事,但我感谢您的回应。 啊,那么这种解决方案行不通。如果您确实解决了这个问题,请在此处回复。【参考方案2】:如果其他人有这个问题,这个链接基本上为我解决了这个问题: http://forums.libsdl.org/viewtopic.php?t=5678&sid=99aa9531656e0aa398ce35a7c348fe88
到目前为止,它还没有解决滚动问题,但确实解决了选择问题,这是主要问题。也许另一个可以通过一些摆弄来修复。
【讨论】:
以上是关于iOS 上 OpenFeint 滚动视图中的触摸问题的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 在 4 英寸上工作,在 3.5 英寸上不响应任何触摸