示例#1
0
        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;
        }
示例#2
0
        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;
        }
示例#3
0
        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;
            }
        }