在 iOS 8 Today Extensions 中拖动手势
Posted
技术标签:
【中文标题】在 iOS 8 Today Extensions 中拖动手势【英文标题】:Dragging Gestures in iOS 8 Today Extensions 【发布时间】:2014-07-03 21:20:51 【问题描述】:我在 Today 小部件中使用了 UIView
子类。该视图使用滑动手势。但是,这些手势要么上下滚动整个通知中心,要么让通知中心从 Today 切换到 Notifications。
有什么方法可以防止触摸事件冒泡到通知中心滚动视图?不幸的是,在子类中使用[self setExclusiveTouch:YES];
并没有解决。
【问题讨论】:
我遇到了同样的问题。我也尝试使用 [self setExclusiveTouch:YES],但没有成功。 我也有类似的问题。我需要在我的视图上检测 touchMoves。水平移动没问题。但是垂直移动使整个今日视图滚动。 :-( 【参考方案1】:有什么方法可以防止触摸事件冒泡到通知中心滚动视图?使用 [self setExclusiveTouch:YES];不幸的是子类中没有解决。
没有。由于您的 Today 小部件在内部呈现远程视图托管,[self setExclusiveTouch:YES]
并不能完全满足您的需求。
ios 8.0 中的粗略架构是:
[用户触摸创建一个UITouch] | v 通知中心(UIScrollView) | v UIRemoteView 容器 (呈现你的 UIView) [跨越流程边界] | v 你的 Today 小部件的 UIView当触摸跨越进程边界时,将其视为基本上被克隆了。您的视图的专有触摸需求仅与您的小部件的进程空间/窗口相关,并且不会向外传播到远程托管您的通知中心。
【讨论】:
【参考方案2】:另一个答案中提到的苹果官方建议:
避免在小部件内放置滚动视图。用户很难 在小部件内滚动而不会无意中滚动 Today 查看。
这是来自 Apple 的写得很糟糕的建议。在 Today 小部件中使用滚动视图非常好,但您必须禁用滚动,以免干扰。 Apple 甚至在他们的 WWDC 演讲中使用了 UITableView。
基本上,它建议您不要干扰通知中心现有的手势。 现有手势恰好在所有四个方向上滚动,因此您可以在小部件中使用手势执行的操作非常有限。
你想要实现什么样的手势?您提到了滑动,但如果您这样做,您将干扰现有的手势并破坏事物。小部件中不允许这种行为,因为它会影响操作系统本身的用户体验。
也许您应该考虑采取不同的方法来处理您的行为?
【讨论】:
问题是,没有滑动手势,你还能做什么?只能点击,这是相当有限的。 @LimThyeChean 今天视图的主要目的是提供可以快速访问的信息,无需进入应用程序本身。如果您随后制作复杂的 UX,其中涉及滑动以显示内容或执行操作等,那么您正在使用今日视图来扩展应用程序的过多功能,从而将焦点从今日视图的设计目的转移开。 有点同意。但是滑动手势可以使 UI 变得更好。一个简单的例子,由于屏幕空间很小,我想使用左右手势来选择上一个和下一个项目。如果没有滑动手势,那么我所能做的就是显示 1 个项目,或者返回到后退/下一个箭头天。 @LimThyeChean 您确实有一点,但是正如我之前提到的,通过将滑动手势添加到您的小部件,您将劫持通知中心中的交互(左右滑动以在今天视图和通知视图)。我只能想象 Apple 不希望你这样做,因为它会影响操作系统的用户体验(而不仅仅是特定的第三方应用程序)。 我同意了。我只是在想,这意味着当你所能做的就是点击时,我们不会看到太多有趣的小部件。【参考方案3】:根据 Apple 的 App Extensions Programming Guide:
“避免将滚动视图放在小部件内。用户很难在小部件内滚动而不会无意中滚动今日视图。”
【讨论】:
我没有在小部件中放置滚动视图。我说的是带有自定义触摸处理的 UIView。 @Raffael 我相信他们提到这一点的原因是因为滑动手势干扰了用于滚动今天视图的滑动手势......无论该滑动是在滚动视图还是实际@ 987654321@以上是关于在 iOS 8 Today Extensions 中拖动手势的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:是不是有可能创建 App Widgets (Android) 和 Today Extensions (iOS)? [复制]
在 iOS 8 的 Today 扩展(小部件)中为按钮添加操作?
iOS 8 beta - Today 扩展无法识别嵌入式框架