ScrollView控件属于一种通用组件,而在UGUI中目前还没有这种组件,因此需要我们自己来做。过程当中会遇到较多的坑,需要自己写一些脚本来进行控制。这里介绍一下制作流程,避免重复踩坑。
下面以好友列表为例进行介绍:
- Hierarchy结构
如下,UIScrollViewFriend是ScrollView的RootUI,UIScrollView用于布局Items,方便动态添加和删除Items并正确布局他们,并界定UIScrollViewFriend的显示区域。
- 每个组件挂机的脚本:
UIScrollViewFriend
- Anchor对齐方式选择不一,这个根据需求自己决定;
- ScrollRect用于确定ScrollView中显示的内容:Content域用于设置内部显示的内容,因此这里选择的是下层的UIScrollView,Horizontal和Vertical是选择拖动的方向支持,Horizontal Scrollbar和Vertical Scrollbar可以和ScrollBar结合使用;
- Canvas Renderer和Image和Mask共同构成遮罩,用于设置内容可见区域;
- UIScrollViewSelector用于点击事件处理。加上这个脚本的原因是,如果在Item上每个Item都加上Event Trigger响应事件,则ScrollView的拖动事件就无法响应,因为Item截取了输入信息。因此我们的做法是由ScrollView统一负责事件处理,然后分发给不同的Item,因此每个Item上需要挂接一个脚本与此对应,这个后面介绍。
-
Event Trigger用于获取事件进行处理,需要响应Drag事件和Pointer Up事件,然后响应函数是UIScrollViewSelector的OnDrag和OnPointerUp函数。
ScrollView
-
Grid Layout Group用于自动布局每个Item的位置,需要设置好每个Item的宽度和高度以及对齐方式等;
-
UIScrollViewFriend用于添加下面Item,这个类继承自UIMFScrollView,AddChild后需要调用UIMFScrollView的RefreshSize方法改变自身大小和所有的孩子的总大小相同。
ScrollItem
UIFriendItem继承自IScrollViewSelect,需要实现Select函数,然后Start的时候需要将自己注册到上层的UIScrollViewSelector中,以正确处理点击事件。
因此总结下来需要自己实现两个脚本:
- 一个需要继承自UIMFScrollView,用于在添加Item时动态改变ScrollView的大小;
- 一个需要继承子IScrollViewSelector,用于处理点击选择事件,在其中进行点击事件的处理。