嵌套ScrollView 左右滑动不影响上下滑动
using UnityEngine; using System.Collections; public class UIMultDragScrollView : MonoBehaviour { public UIScrollView hScrollView; public UIScrollView vScrollView; public UIDragScrollView dragScrollView; public float directionTolerance = 0.2f; bool dragCheck = true; public float direcDegle = 45; public void OnDrag(Vector2 delta) { int sd = -1; if (dragCheck) { dragCheck = false; sd = GetSwipeDirection(UICamera.currentTouch.delta, directionTolerance); } Debug.Log("swp"+sd); if( sd == 0) { Debug.Log("左"); dragScrollView.scrollView = hScrollView; vScrollView.movement = UIScrollView.Movement.Custom; vScrollView.currentMomentum = new Vector3(0, 0); hScrollView.movement = UIScrollView.Movement.Horizontal; hScrollView.enabled = true; vScrollView.enabled = false; vScrollView.Press(false); hScrollView.Press(true); // hScrollView.Drag(); } if (sd == 1) { Debug.Log("上"); dragScrollView.scrollView = vScrollView; hScrollView.enabled = false; hScrollView.movement = UIScrollView.Movement.Custom; hScrollView.currentMomentum = new Vector3(0, 0); vScrollView.movement = UIScrollView.Movement.Vertical; vScrollView.enabled = true; hScrollView.Press(false); vScrollView.Press(true); // vScrollView.Drag(); } } void OnPress(bool isDown) { if (isDown) { dragCheck = true; } } int GetSwipeDirection(Vector3 dir, float tolerance) { float minSwipeDot = Mathf.Clamp01(1.0f - tolerance); if (Mathf.Rad2Deg * (Mathf.Acos(Vector2.Dot(dir, Vector2.right) / (dir.magnitude * Vector2.right.magnitude))) <= direcDegle && Vector2.Dot(dir, Vector2.right) >= minSwipeDot) return 0; if (Mathf.Rad2Deg * (Mathf.Acos(Vector2.Dot(dir, -Vector2.right) / (dir.magnitude * (-Vector2.right).magnitude))) <= direcDegle && Vector2.Dot(dir, -Vector2.right) >= minSwipeDot) return 0; if (Mathf.Rad2Deg * (Mathf.Acos(Vector2.Dot(dir, Vector2.up) / (dir.magnitude * Vector2.up.magnitude))) <= 90 - direcDegle && Vector2.Dot(dir, Vector2.up) >= minSwipeDot) return 1; if (Mathf.Rad2Deg * (Mathf.Acos(Vector2.Dot(dir, -Vector2.up) / (dir.magnitude * (-Vector2.up).magnitude))) <= 90 - direcDegle && Vector2.Dot(dir, -Vector2.up) >= minSwipeDot) return 1; return -1; } }