iOS - 重新创建UIActionSheet / UIAlertController拖动以突出显示

问题描述 投票:0回答:2

UIActionSheet的命中检测如何工作?当用户选择一个选项然后将其手指移动到另一个选项时,另一个选项会突出显示,如下面的GIF所示。检测还知道用户何时滚动。

First GIF Second GIF with scrolling

ios swift uialertcontroller uiactionsheet
2个回答
3
投票

所以这是通过听多个UIControlEvents来实现的。有可能你习惯听touchUpInside,因为这是UIButton行为的标准。但除此之外还有更多。完整列表和文档可以找到here

在你的情况下,你想听touchDragEntertouchDownInside,使这些回调调用一些改变按钮背景颜色的代码。

您还应该听touchDragExittouchUpInside将背景颜色恢复正常。

此外,您应该在touchUpInside中运行操作代码。

我希望这能解决问题!


1
投票

UIAlertController在子视图中包含一堆项目,类型为UIStackView,此堆栈视图放置在类型为_UIInterfaceActionRepresentationsSequenceView的视图上,该类型具有三个类型的手势识别器:

• UIScrollViewDelayedTouchesBeganGestureRecognizer
• UIScrollViewPanGestureRecognizer
• _UIDragAutoScrollGestureRecognizer

您可以使用Xcode内置工具检查它:用户界面检查器。

我认为这些识别器的自定义处理程序提供了这种drag-and-highlight功能。

UIAlertController的内部逻辑处理堆栈中的触摸和命中测试子视图,并将用户手指下的项目的highlighted布尔属性设置为YES,而将其他设置设置为NO。

© www.soinside.com 2019 - 2024. All rights reserved.