使UIScrollView的dragIcons更加用户友好

时间:2013-01-10 15:05:28

标签: c# user-interface uiscrollview drag-and-drop xamarin.ios

关于Monotouch C#iOS开发:

在我的一个应用程序中,我有一个UIScrollview作为包含可拖动图标的“工具箱”。用户可以滚动工具箱来决定他想要的项目,然后将其拖到屏幕上。它运行良好,花花公子,但用户界面部分可以改进。我想提出一种改进方法,但我不确定如何实施它。想法?

enter image description here

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

当前方法: UIScrollview包含可拖动的UIImages。我正在使用scrollView.DelaysContentTouches = true方法将触摸转移到UIImage。所以基本上,如果用户在UIScrollview中的任何地方滑动(即使他在可拖动的图标上滑动),只要他快速滑动它就算作滚动。 DelaysContentTouches具有大约0.16秒的内置延迟。以下是对那些不知道的人的描述:

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

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

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

enter image description here

在此图像中,顶部的红色区域是“Scroll Me Range”,下面的黄色区域是“Drag Me Range”。角度由黄色角度线定义。

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

你会如何实现这个?或者你有更好的主意吗?

0 个答案:

没有答案