void OnPinchAndRotate(UIGestureRecognizer gr)
        {
            if (touchCount == 0)
            {
                touchCount++;
            }

            PinchEventArgs  pinchEventArgs  = new iOSPinchEventArgs(gr, _previousPinchArgs);
            RotateEventArgs rotateEventArgs = new iOSRotateEventArgs(gr, _previousRotateArgs);

            if (gr.State == UIGestureRecognizerState.Ended || gr.State == UIGestureRecognizerState.Cancelled || gr.State == UIGestureRecognizerState.Failed)
            {
                if (_previousPinchArgs == null && _previousRotateArgs == null)
                {
                    return;
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching || listener.HandlesPinched)
                    {
                        pinchEventArgs.Listener = listener;
                        listener.OnPinched(pinchEventArgs);
                        if (pinchEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesRotating || listener.HandlesRotated)
                    {
                        rotateEventArgs.Listener = listener;
                        listener.OnRotated(rotateEventArgs);
                        if (rotateEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                _previousPinchArgs  = null;
                _previousRotateArgs = null;
                _pinching           = false;
                _rotating           = false;
                _panning            = false;
                _longPressing       = false;
            }
            else
            {
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching)
                    {
                        pinchEventArgs.Listener = listener;
                        listener.OnPinching(pinchEventArgs);
                        if (pinchEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesRotating)
                    {
                        rotateEventArgs.Listener = listener;
                        listener.OnRotating(rotateEventArgs);
                        if (rotateEventArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                _previousPinchArgs  = pinchEventArgs;
                _previousRotateArgs = rotateEventArgs;
            }
        }
예제 #2
0
        void OnPinchAndRotate(UIGestureRecognizer gr)
        {
            PinchEventArgs  pinchEventArgs  = new iOSPinchEventArgs(gr, _previousPinchArgs, _viewLocationAtOnDown);
            RotateEventArgs rotateEventArgs = new iOSRotateEventArgs(gr, _previousRotateArgs, _viewLocationAtOnDown);

            if (touchCount == 0)
            {
                //System.Diagnostics.Debug.WriteLine("onPinchAndRotate set _viewLocationAtOnDown");
                _viewLocationAtOnDown = ViewLocationInWindow(gr.View);
                touchCount++;
            }
            bool handled = false;

            if (gr.State == UIGestureRecognizerState.Ended || gr.State == UIGestureRecognizerState.Cancelled || gr.State == UIGestureRecognizerState.Failed)
            {
                if (_previousPinchArgs == null && _previousRotateArgs == null)
                {
                    return;
                }
                foreach (var listener in _listeners)
                {
                    //if (handled)
                    //  break;
                    if (listener.HandlesPinching || listener.HandlesPinched)
                    {
                        var taskArgs = new PinchEventArgs(pinchEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnPinched(taskArgs);
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    //if (handled)
                    //  break;
                    if (listener.HandlesRotating || listener.HandlesRotated)
                    {
                        var taskArgs = new RotateEventArgs(rotateEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnRotated(taskArgs);
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                //gr.CancelsTouchesInView = handled;
                _previousPinchArgs  = null;
                _previousRotateArgs = null;
                _pinching           = false;
                _rotating           = false;
                _panning            = false;
                _longPressing       = false;
            }
            else
            {
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesPinching)
                    {
                        var taskArgs = new PinchEventArgs(pinchEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnPinching(taskArgs);
                        handled = handled || pinchEventArgs.Handled;
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                foreach (var listener in _listeners)
                {
                    if (listener.HandlesRotating)
                    {
                        var taskArgs = new RotateEventArgs(rotateEventArgs);
                        taskArgs.Listener = listener;
                        listener.OnRotating(taskArgs);
                        handled = handled || rotateEventArgs.Handled;
                        if (taskArgs.Handled)
                        {
                            break;
                        }
                    }
                }
                _previousPinchArgs  = pinchEventArgs;
                _previousRotateArgs = rotateEventArgs;
            }

            /*
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (gr.State != UIGestureRecognizerState.Ended && gr.State != UIGestureRecognizerState.Cancelled && gr.State != UIGestureRecognizerState.Failed)
             *  {
             *      if (listener.HandlesPinching)
             *      {
             *          var taskArgs = new PinchEventArgs(pinchEventArgs);
             *          taskArgs.Listener = listener;
             *          listener.OnPinching(taskArgs);
             *          handled = handled ||  pinchEventArgs.Handled;
             *          if (taskArgs.Handled)
             *              break;
             *      }
             *  }
             * }
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (gr.State != UIGestureRecognizerState.Ended && gr.State != UIGestureRecognizerState.Cancelled && gr.State != UIGestureRecognizerState.Failed)
             *  {
             *      if (listener.HandlesRotating)
             *      {
             *          var taskArgs = new RotateEventArgs(rotateEventArgs);
             *          taskArgs.Listener = listener;
             *          listener.OnRotating(taskArgs);
             *          handled = handled ||  rotateEventArgs.Handled;
             *          if (taskArgs.Handled)
             *              break;
             *      }
             *  }
             * }
             * _previousPinchArgs = pinchEventArgs;
             * _previousRotateArgs = rotateEventArgs;
             * //gr.CancelsTouchesInView = handled;
             * if (handled)
             *  return;
             * if (_previousPinchArgs == null && _previousRotateArgs == null)
             *  return;
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (listener.HandlesPinching || listener.HandlesPinched)
             *  {
             *      var taskArgs = new PinchEventArgs(pinchEventArgs);
             *      taskArgs.Listener = listener;
             *      listener.OnPinched(taskArgs);
             *      if (taskArgs.Handled)
             *          break;
             *  }
             * }
             * foreach (var listener in _listeners)
             * {
             *  //if (handled)
             *  //	break;
             *  if (listener.HandlesRotating || listener.HandlesRotated)
             *  {
             *      var taskArgs = new RotateEventArgs(rotateEventArgs);
             *      taskArgs.Listener = listener;
             *      listener.OnRotated(taskArgs);
             *      if (taskArgs.Handled)
             *          break;
             *  }
             * }
             * //gr.CancelsTouchesInView = handled;
             * _previousPinchArgs = null;
             * _previousRotateArgs = null;
             * _pinching = false;
             * _rotating = false;
             * _panning = false;
             * _longPressing = false;
             */
        }