集合视图前面的全窗口视图



我正在尝试实现以下行为:

  • 长按收藏视图会将全窗口视图(称为LetterView)显示在前面
  • 后续手势/触摸仅由LetterView处理

(编辑:我应该提到的是,我想要看到LetterView下的collectionview项目的透明效果)

不过,我似乎遇到了其他人都在尝试实现的行为——我的触摸被LetterView和collection视图处理。也就是说,我可以滚动收藏视图,并通过最上面的视图处理点击量。在XCode中显示视图层次结构可以清楚地在前面显示LetterView,UICollectionView和LetterView都是UICollectionWrapperView的子视图。

LetterView是一个带有UIViewController子类的UIView子类。它以编程方式添加到视图层次结构中,在我的UICollectionViewController子类的viewDidLoad方法中,如下所示:

super.viewDidLoad()
letterDrawingViewController = LetterDrawingViewController()
let viewFrame : CGRect = self.collectionView!.frame
letterDrawingViewController.view = LetterDrawingView.init(frame:viewFrame)
letterDrawingView = letterDrawingViewController.view
self.addChildViewController(letterDrawingViewController)
letterDrawingViewController.didMoveToParentViewController(self)
collectionView?.addSubview(letterDrawingView)
  • 这似乎不是第一响应者的问题,因为我试图在LetterView中覆盖canBecomeFirstResponder,并在将其移动到前面时为其分配第一响应者状态
  • 我尝试在CollectionView上设置userInteractionEnabled=FALSE,但在将LetterView移到前面后,在LetterView上保持为true。这禁用了两个视图的所有触摸事件
  • 当我将LetterView移到前面时,我尝试将其设置为exclusiveTouch=True。这似乎没有任何作用

除了任何特定的提示之外,有没有像这样调试命中测试的通用技术?根据iOS中关于点击测试的文档,iOS应该更喜欢对hitTest:withEvent:返回yes的"最深"子视图,因为LetterView是collectionview的子视图,并且在它的所有单元格前面,应该是最前面的吗?我是否可以启用任何日志记录来查看视图层次结构中的命中测试?

谢谢!

内特。

如果letterView是全屏的,您可能不想像现在这样将其添加为集合视图的子视图。也许可以尝试将它添加到应用程序的窗口中,看看效果如何。至少在这种情况下,它应该拦截所有的触摸事件。

另一种方法,尽管无可否认是一种更脆弱的感觉,是在呈现和取消letterView时启用和禁用collectionView上的用户交互。因此,当letterView即将呈现时,您可以调用

    self.collectionView.userInteractionEnabled = NO;

如果你也知道这个观点什么时候会被驳回,你可以打电话给

    self.collectionView.userInteractionEnabled = YES;

这里唯一需要担心的是,你不会陷入一种糟糕的状态,即你的letterView没有显示,你的collectionView也忽略了用户的触摸。这会让人感觉完全崩溃。

虽然我认为你可以很容易地处理你的问题,但我认为你犯了一个设计错误。感觉就像你试图像网络开发人员一样编写这种想法,在你的视图中添加一个子视图,并试图像在现代JavaScript单页应用程序中那样拦截那里的触摸。在iOS中,我认为这是一个糟糕的设计。您应该使用apple提供的方法分割或呈现新的viewController。

所以你的代码应该看起来很舒缓,比如:

letterDrawingViewController = LetterDrawingViewController()
self.presentViewController(letterDrawingViewController, animated: true, completion: nil)

iOS8还有一个额外的好处,可以让你有很棒的自定义转换。看看这个:http://www.appcoda.com/custom-segue-animations/

最新更新