void IEndDragHandler.OnEndDrag(PointerEventData eventData) { if (!QUIEventUtil.Interactable(gameObject) || !mDragBegan) { return; } UIEventLockManager.Instance.SendMsg(new UIUnlockObjEventMsg(gameObject)); if (mCurState == State.Scroll) { if (null != ScrollRect) { mOnScrollEndedEvent.InvokeGracefully(); ExecuteEvents.Execute <ScrollRect>(ScrollRect.gameObject, eventData, delegate(ScrollRect handler, BaseEventData data) { handler.OnEndDrag(data as PointerEventData); }); } mCurState = State.Idle; } else { mOnDragEndedEvent.InvokeGracefully(); } mDragBegan = false; }
void IBeginDragHandler.OnBeginDrag(PointerEventData eventData) { if (!QUIEventUtil.Interactable(gameObject)) { return; } UIEventLockManager.Instance.SendMsg(new UILockObjEventMsg(gameObject)); mCurrentDragCalculated = false; mDragBeganMousePos = (transform.parent as RectTransform).GetLocalPosInRect(QUIManager.Instance.RootCanvas.worldCamera); mDragBegan = true; }
void IDragHandler.OnDrag(PointerEventData eventData) { if (!QUIEventUtil.Interactable(gameObject) || !mDragBegan) { return; } if (!mCurrentDragCalculated && mCurState == State.Idle) { var offsetFromBegan = (transform.parent as RectTransform).GetLocalPosInRect(QUIManager.Instance.RootCanvas.worldCamera) - mDragBeganMousePos; if (offsetFromBegan.magnitude > 10) { mCurrentDragCalculated = true; if (offsetFromBegan.x > 0 && offsetFromBegan.x > Mathf.Abs(offsetFromBegan.y)) { mCurState = State.Drag; mOnDragBeganEvent.InvokeGracefully(); } else { mCurState = State.Scroll; if (null != ScrollRect) { ExecuteEvents.Execute <ScrollRect>(ScrollRect.gameObject, eventData, delegate(ScrollRect handler, BaseEventData data) { handler.OnBeginDrag(data as PointerEventData); }); } } return; } } else if (!mCurrentDragCalculated && mCurState == State.Drag) { mOnDragBeganEvent.InvokeGracefully(); mCurrentDragCalculated = true; return; } switch (mCurState) { case State.Drag: mOnDragEvent.InvokeGracefully(); break; case State.Scroll: if (null != ScrollRect) { mOnScrollEvent.InvokeGracefully(); ExecuteEvents.Execute <ScrollRect>(ScrollRect.gameObject, eventData, delegate(ScrollRect handler, BaseEventData data) { handler.OnDrag(data as PointerEventData); }); } break; } }