禁用 uicollectionview 水平滚动的外部平移手势
Posted
技术标签:
【中文标题】禁用 uicollectionview 水平滚动的外部平移手势【英文标题】:disable external pan gesture for uicollectionview horizontal scroll 【发布时间】:2018-11-07 12:45:39 【问题描述】:在我的 viewController 中,我有一个 CollectionView:mainCollectionView
作为 UIView 子视图,其中包含三个水平滚动的单元格(viewController 框架大小)。 mainCollectionView
也有一个 panGesture
显示另一个 viewController:sideMenuController
。
在我的mainCollectionView
Cell 中是另一个水平滚动的collectionView:weekCollectionView
作为子视图。当我在 weekCollectionView
中滚动时,我将如何禁用 panGesture
和 mainCollectionView
滚动?
这是我的代码 -
mainCollectionView panGesture:
fileprivate func setupPanGesture()
panGesture = UIPanGestureRecognizer(target: self, action: #selector(panRight(sender:)))
panGesture.delegate = self
mainCollectionView.addGestureRecognizer(panGesture)
@objc func panRight(sender: UIPanGestureRecognizer)
let translation = sender.translation(in: mainCollectionView)
let indexPath = NSIndexPath(item: 0, section: 0)
if (mainCollectionView.cellForItem(at: indexPath as IndexPath) != nil)
if translation.x > 0
(UIApplication.shared.keyWindow?.rootViewController as? MasterViewController)?.handlePan(sender: sender)
mainCollectionView.isScrollEnabled = false
else if translation.y > 0 || translation.y < 0
panGesture.isEnabled = false
mainCollectionView.isScrollEnabled = true
if (mainCollectionView.cellForItem(at: indexPath as IndexPath) == nil)
panGesture.isEnabled = false
mainCollectionView.isScrollEnabled = true
panGesture.isEnabled = true
mainCollectionView.isScrollEnabled = true
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
return true
【问题讨论】:
【参考方案1】:实现 UIGestureRecognizerDelegate 到你的类
将手势委托设置为自身。
panGesture.delegate = self
添加这个委托功能
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
if (gestureRecognizer is UIPanGestureRecognizer || gestureRecognizer is UIRotationGestureRecognizer)
return true
else
return false
【讨论】:
以上是关于禁用 uicollectionview 水平滚动的外部平移手势的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式禁用 UICollectionView 中的垂直滚动
禁用 scrollViewDidScroll:滚动 UICollectionView 时 - iOS