【发布时间】:2015-04-25 13:01:24
【问题描述】:
这是一个非常假设的问题,只是为了理解正确的设计,但可以说我有两个自定义 UIView。
其中一个本质上是一个容器,我称之为抽屉。其目的是隐藏和显示内容。它很像 iOS 上的通知中心,您可以在其中轻扫以将其拉开,然后将其弹回以将其关闭。它是一个通用容器,不能包含任何其他 UIView。它有一个 UIPanGestureRecognizer 来跟踪拉动它打开/关闭的手指。它还可能有一个 UISwipeGestureRecognizer 来检测“轻弹”。
另一个视图是一个自定义地图小部件,它具有 UIPan/Rotation/Pinch GestureRecognizers。
我认为抽屉视图应该是 Pan/Swipe GestureRecognizers 的 UIGestureRecognizerDelegate 以便它可以防止触摸被传递,除非用户抓住“手柄”。
我的第一个直觉是让地图成为平移/旋转/捏合手势的 UIGestureRecognizerDelegate,以便它们可以同时运行。
我遇到的问题是,在抽屉完全打开之前,我真的不希望地图接收任何触摸或开始识别手势。我希望能够在抽屉本身中自动执行此行为,以便它适用于所有开箱即用的子视图。
我能想到的唯一方法是将所有手势处理程序连接到 ViewController 并让它做所有事情,但对我来说这破坏了封装,因为现在它必须知道地图手势需要同时运行,抽屉应该只接触它的把手,地图应该只在它打开时接触。
有哪些方法可以使逻辑保留在我认为它所属的视图中?
【问题讨论】:
标签: ios uiview uigesturerecognizer gesture uicontrol