如何检测 UICollectionView 上的触摸?

Posted

技术标签:

【中文标题】如何检测 UICollectionView 上的触摸?【英文标题】:How to detect touch on UICollectionView? 【发布时间】:2014-03-18 17:47:47 【问题描述】:

我想在屏幕上有手指时禁用 UICollectionViewController 的自动旋转,就像 iPhone 照片应用一样。

如何做到这一点?

如果使用点击手势,如何区分不同的触摸状态? (状态应该是touching,即使在手指移动之后。) 如果使用touchBegan:withEvent:,该代码放在哪里? (命中视图可以是 UICollectionView 的任何子视图。)

【问题讨论】:

【参考方案1】:

我会在touchesBegan 中设置一个标志并在touchesEnded 中清除它。然后在您的shouldAutoRotate 方法中,您可以检查标志,如果设置了标志,则返回 false。

类似这样的:

// In your UICollectionView subclass:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    // Do stuff
    ...
    canRotate = NO;


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

    // Do stuff
    ...
    canRotate = YES;


// In your UICollectionViewController:

-(bool)shouldAutorotate

    return(canRotate);

【讨论】:

嗯,它有效。我应该在 UICollectionView 中覆盖 touchesBegan:。为什么我不能只覆盖 touchesBegan: 在 UICollectionViewController 中,它也是一个 UIResponder? touchesBegan: 也是一个 UIViewController 方法。

以上是关于如何检测 UICollectionView 上的触摸?的主要内容,如果未能解决你的问题,请参考以下文章

在按钮 B 的触地期间触发按钮 A 上的触地

iOS11 AR场景中关于3D模型的触碰检测

当我的球碰到篮筐时如何加分?如何判断球与篮的触感?

UICollectionView:如何检测滚动何时停止

检测用户将项目拖出 UICollectionView?

如何检测滚动到水平 UICollectionView 的末尾