滚动视图平移防止捏手势?

Posted

技术标签:

【中文标题】滚动视图平移防止捏手势?【英文标题】:Scroll view panning prevents pinch gesture? 【发布时间】:2011-05-18 00:57:27 【问题描述】:

我正在创建一个用于游戏项目的图像平铺库,以适应我们现有的框架。我目前正在使用 UIScrollView (带有空视图)来允许我劫持漂亮的物理效果以使用反弹进行平移,但我必须使用捏合手势识别器实现自己的缩放(出于我不会进入的原因) .

不过,事情是这样的——当我用一根手指平移时,添加第二次触摸并尝试缩放什么也没做。在它允许我缩放之前,我需要完全静止。当用户在图像周围平移时,我的捏合手势识别器永远不会触发,除非平移完全完成。

有谁知道解决这个问题的方法,不涉及废弃 UIScrollView 并实现我自己的平移?

这是我的 scrollViewDidScroll 函数:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    viewingBounds.origin.x = scrollView.contentOffset.x;
    // Transform the y from UIKit coordinates into OpenGL coordinates
    viewingBounds.origin.y = world.height - viewingBounds.size.height - scrollView.contentOffset.y;
    [parentScene update]; // Render the image

我的手势识别器直接添加到 init 中的滚动视图中:

[scrollView addGestureRecognizer:[[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(didReceivePinch:)] autorelease]];

【问题讨论】:

【参考方案1】:

您需要设置 GestureRecognizer 对象的委托,并在委托中实现此方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

并让它返回 YES。

【讨论】:

【参考方案2】:

您是否尝试过 Apple 的 ZoomingPDFViewer 或 PhotoScroller 中的任何内容?在 Photo Scroller 中,图像被平铺和平铺,然后您放大。希望您可以从中获得一些东西。如果您在解压缩文件时遇到问题,请尝试从 Xcode 下载。

我想我还发现其他一些人在做一些接近的事情:

https://***.com/questions/5383757/scaling-panning-a-uiimageview-using-pinch-and-swipe-gestures-free-code

http://answers.unity3d.com/questions/22500/how-to-zoom-and-pan-when-you-pinchswipe-across-scr.html

http://technology.blurst.com/iphone-multi-touch/

希望对你有帮助。

【讨论】:

是的,我都看过了,但问题是他们都只是使用滚动视图来渲染他们的场景,而我们想要在我们自己的 OpenGL 系统中完全控制渲染。这就是问题所在——UIScrollView 中的缩放值完全取决于你在 viewForZoomingInScrollView 中传递它的视图,并希望你对它给你的东西感到满意——即使传递一个空白视图也不能解决我们的问题。老实说,我认为我只需要删除滚动视图并使用触摸重新实现它的一些功能。有点痛,但不是太严重。 :)【参考方案3】:

嘿亚当,我不知道你是否重写了任何东西,但我有一些替代方案给你here、here、here,更糟糕的情况是问别人同样的问题here。希望对您有所帮助。

【讨论】:

以上是关于滚动视图平移防止捏手势?的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图中基于平移手势的移动视图控制器

是否可以在按钮上启动滚动视图平移手势

是否可以禁用滑动手势并仅使平移手势在滚动视图中工作?

带有平移手势冲突的滚动视图和侧边菜单

基于平移手势翻译的滚动scrollview

中心控制器具有滚动视图时的 MMDrawerController 平移手势行为