FairyGUI.ScrollPane.__touchMove C# (CSharp) Method

__touchMove() private method

private __touchMove ( EventContext context ) : void
context EventContext
return void
        private void __touchMove(EventContext context)
        {
            if (!_touchEffect || _owner.displayObject == null || _owner.displayObject.isDisposed)
                return;

            if (draggingPane != null && draggingPane != this || GObject.draggingObject != null) //已经有其他拖动
                return;

            InputEvent evt = context.inputEvent;
            if (_touchId != evt.touchId)
                return;

            Vector2 pt = _owner.GlobalToLocal(new Vector2(evt.x, evt.y));
            if (float.IsNaN(pt.x))
                return;

            int sensitivity;
            if (Stage.touchScreen)
                sensitivity = UIConfig.touchScrollSensitivity;
            else
                sensitivity = 8;

            float diff;
            bool sv = false, sh = false, st = false;

            if (_scrollType == ScrollType.Vertical)
            {
                if (!_isHoldAreaDone)
                {
                    //表示正在监测垂直方向的手势
                    _gestureFlag |= 1;

                    diff = Mathf.Abs(_holdAreaPoint.y - pt.y);
                    if (diff < sensitivity)
                        return;

                    if ((_gestureFlag & 2) != 0) //已经有水平方向的手势在监测,那么我们用严格的方式检查是不是按垂直方向移动,避免冲突
                    {
                        float diff2 = Mathf.Abs(_holdAreaPoint.x - pt.x);
                        if (diff < diff2) //不通过则不允许滚动了
                            return;
                    }
                }

                sv = true;
            }
            else if (_scrollType == ScrollType.Horizontal)
            {
                if (!_isHoldAreaDone)
                {
                    _gestureFlag |= 2;

                    diff = Mathf.Abs(_holdAreaPoint.x - pt.x);
                    if (diff < sensitivity)
                        return;

                    if ((_gestureFlag & 1) != 0)
                    {
                        float diff2 = Mathf.Abs(_holdAreaPoint.y - pt.y);
                        if (diff < diff2)
                            return;
                    }
                }

                sh = true;
            }
            else
            {
                _gestureFlag = 3;

                if (!_isHoldAreaDone)
                {
                    diff = Mathf.Abs(_holdAreaPoint.y - pt.y);
                    if (diff < sensitivity)
                    {
                        diff = Mathf.Abs(_holdAreaPoint.x - pt.x);
                        if (diff < sensitivity)
                            return;
                    }
                }

                sv = sh = true;
            }

            float t = Time.time;
            if (t - _time2 > 0.05f)
            {
                _time2 = _time1;
                _time1 = t;
                st = true;
            }

            if (sv)
            {
                float y = pt.y - _yOffset;
                if (y > 0)
                {
                    if (!_bouncebackEffect || _inertiaDisabled)
                        _container.y = 0;
                    else
                        _container.y = (int)(y * 0.5f);
                }
                else if (y < -_yOverlap)
                {
                    if (!_bouncebackEffect || _inertiaDisabled)
                        _container.y = -(int)_yOverlap;
                    else
                        _container.y = (int)((y - _yOverlap) * 0.5f);
                }
                else
                {
                    _container.y = y;
                }

                if (st)
                {
                    _y2 = _y1;
                    _y1 = _container.y;
                }
            }

            if (sh)
            {
                float x = pt.x - _xOffset;
                if (x > 0)
                {
                    if (!_bouncebackEffect || _inertiaDisabled)
                        _container.x = 0;
                    else
                        _container.x = (int)(x * 0.5f);
                }
                else if (x < 0 - _xOverlap)
                {
                    if (!_bouncebackEffect || _inertiaDisabled)
                        _container.x = -(int)_xOverlap;
                    else
                        _container.x = (int)((x - _xOverlap) * 0.5f);
                }
                else
                {
                    _container.x = x;
                }

                if (st)
                {
                    _x2 = _x1;
                    _x1 = _container.x;
                }
            }

            draggingPane = this;
            _isHoldAreaDone = true;
            _isMouseMoved = true;

            SyncPos();
            syncScrollBar();

            onScroll.Call();
        }