1

关于 Monotouch C# iOS 开发:

在我的一个应用程序中,我有一个 UIScrollview,它充当包含可拖动图标的“工具箱”。用户可以滚动工具箱来决定他想要哪个项目,然后将其拖到屏幕上。它工作得很好而且很漂亮,但是用户界面部分可以改进。我想提出一种改进方法,但我不确定如何实施它。想法?

在此处输入图像描述

此图像的顶部是 UIScrollview 工具箱。在其中,有几个可拖动的图标。

当前方法: UIScrollview 包含可拖动的 UIImages。我正在使用 scrollView.DelaysContentTouches = true 方法将触摸转移到 UIImage。所以基本上,如果用户在 UIScrollview 中的任何地方滑动(即使他在可拖动的图标上滑动),只要他快速滑动它就可以算作滚动。DelaysContentTouches 的内置延迟约为 0.16 秒。下面为不知道的小伙伴一一介绍:

DelaysContentTouches:如果此属性的值为 YES,则滚动视图会延迟处理触摸向下手势,直到它可以确定滚动是否是意图。如果值为 NO ,则滚动视图立即调用 touchesShouldBegin:withEvent:inContentView:。默认值为是。

当前方法的问题: 当前方法有效,但它不是白痴证明或超级直观。在某种程度上,它是直观的,但这不是我喜欢的。我用我的软件做了一些项目演示,人们被绊倒的事情是试图将图标从工具箱拖到工具箱中。他们总是尝试拖动“类似滑动的动作”并最终滚动工具箱而不是拖动图标。听起来很愚蠢,刚接触该应用程序的人总是会花大约 1 分钟的时间来弄清楚拖动是如何工作的,我最终向他们展示了在拖动之前你必须触摸并按住几分之一秒。这不好。

新提议的方法:我提议的方法根据“滑动”或“拖动”发生的角度确定用户拖动与滚动的意图。我将从工具箱中定义一个角度范围,即 Drag me Range 和 Scroll Me Range。当用户触摸图标并开始向下拖动时,TouchesMoved 函数将测量拖动的移动距离。一旦 Touch 移动了大约 5 或 10 个像素的距离,它就会测量从初始触摸位置到当前移动位置的角度。如果角度在 Drag Me Angle Range 内,它会拖动图标。如果角度在 Scroll Me 范围内,它会滚动图标。

在此处输入图像描述

在这张图片中,顶部的红色区域是“Scroll Me Range”,下方的黄色区域是“Drag Me Range”。角度由黄色角度线定义。

实施这个新方法: 我将如何实施这个?我是否应该允许 Touch 进​​入 DragIcon 和 UIScrollView 的 TouchesBegan,然后取消它不使用的触摸?示例:用户尝试通过快速滑动向下拖动图标。UIScrollView 和 DragIcon 都在 TouchesBegan 中接收到触摸。在它拖动 10 个像素的距离后,TouchesMoved 函数测量角度并确定它在 DragMe 范围内。因为它在 DragMe 范围内,所以它取消了 UIScrollView 内的触摸,所以它不再移动......我可以这样做吗?这里的副作用是,在等待测量角度的前 10 个像素移动期间,DragIcon 和 UIScrollview 都将移动/滚动......

你将如何实现这一点?还是你有更好的主意?

4

0 回答 0