美文网首页react-native
解决嵌套Scrollview造成的滑动冲突

解决嵌套Scrollview造成的滑动冲突

作者: 迷途小路 | 来源:发表于2019-08-20 17:17 被阅读0次

    当一个Scrollview套在另一个Scrollview中时,(方向不同)则外层的会被屏蔽,这里可以添加上这样一个脚本来解决,
    思路为:子框监听滑动事件,开始滑动时判断手势的方向,根据方向来启用对应的滑动框。
    参考文章:https://www.cnblogs.com/suoluo/p/5643885.html

    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    
    public class NestedScrollRect : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
    
        public ScrollRect parentScrollRect; //父框
        ScrollRect scrollRect; //子框
        const bool isUpAndDown = true; //子框的滑动方向
        void Awake () {
            scrollRect = GetComponent<ScrollRect> ();
            if (parentScrollRect == null) {
                parentScrollRect = scrollRect.GetComponentsInParent<ScrollRect> () [1]; //查找父节点的Scrollview
            }
        }
    
        //开始拖动
        public void OnBeginDrag (PointerEventData eventData) {
            parentScrollRect.OnBeginDrag (eventData);
            float angle = Vector2.Angle (eventData.delta, Vector2.up); //拖动方向和up方向的夹角
            //根据夹角判断启用哪一个Scrollview
            if (angle > 45 && angle < 135) {
                scrollRect.enabled = !isUpAndDown;
                parentScrollRect.enabled = isUpAndDown;
            } else {
                scrollRect.enabled = isUpAndDown;
                parentScrollRect.enabled = !isUpAndDown;
            }
        }
    
        //拖动中
        public void OnDrag (PointerEventData eventData) {
            parentScrollRect.OnDrag (eventData);
        }
    
        //结束拖动,需要将2个滑动框都启用
        public void OnEndDrag (PointerEventData eventData) {
            parentScrollRect.OnEndDrag (eventData);
            scrollRect.enabled = true;
            parentScrollRect.enabled = true;
        }
    }
    

    相关文章

      网友评论

        本文标题:解决嵌套Scrollview造成的滑动冲突

        本文链接:https://www.haomeiwen.com/subject/otzpsctx.html