在iOS 8今日扩展中拖动手势

我在Today小部件中使用了UIView子类。 该视图使用滑动手势。 但是,这些手势要么上下滚动整个通知中心,要么将通知中心从今天切换到通知

有没有办法阻止触摸事件冒泡到Notification Center滚动视图? 使用[self setExclusiveTouch:YES]; 在子类中没有解决它不幸。

有没有办法阻止触摸事件冒泡到Notification Center滚动视图? 使用[self setExclusiveTouch:YES]; 在子类中没有解决它不幸。

不会。由于远程视图托管您的Today小部件正在内部显示, [self setExclusiveTouch:YES]并不能完全按照您的要求进行操作。

iOS 8.0中的粗略架构是:

 [用户触摸创建UITouch]
             |
             v
通知中心(UIScrollView)
             |
             v
   UIRemoteView容器
   (介绍你的UIView)
 [跨过程边界]
             |
             v
你的今日小部件的UIView

可以认为触摸在穿过过程边界时基本上被克隆了。 您的视图的独有触摸欲望仅与您的窗口小部件的进程空间/窗口相关,并且不会向外传播到远程托管您的通知中心。

苹果官方建议在另一个答案中提到:

避免在窗口小部件中放置滚动视图。 用户很难在窗口小部件中滚动,而不会无意中滚动今日视图。

这是来自Apple的非常糟糕的书面建议。 在Today窗口小部件中使用滚动视图是完全正确的,但您必须禁用滚动以使其不会干扰。 Apple甚至在他们的WWDC谈话中使用UITableView。

基本上它建议您不要干扰通知中心现有的手势。
现有的手势恰好在所有四个方向上滚动,因此您在小部件中使用手势可以做的事情非常有限。

你想要达到什么样的姿态? 你提到了滑动,但如果你这样做,你就会干扰现有的手势并打破局面。 在小部件中不允许这种行为,因为它会影响操作系统本身的UX。

也许你应该考虑采取不同的方法来处理你的行动?

根据Apple的App Extensions编程指南:

“避免在窗口小部件中放置滚动视图。用户很难在窗口小部件中滚动而不会无意中滚动今日视图。”