private void PanOrTapValue(UIGestureRecognizer recognizer)
        {
            var center = new PointF(this.Bounds.Width / 2f, this.Bounds.Height / 2f);

            switch (recognizer.State)
            {
            case UIGestureRecognizerState.Began:
            case UIGestureRecognizerState.Changed:
            case UIGestureRecognizerState.Ended:
                var point = recognizer.LocationInView(this);
                var dx    = point.X - center.X;
                var dy    = point.Y - center.Y;
                //var distance = Math.Sqrt(dx * dx + dy * dy);

                var angle = (float)Math.Atan2(-dy, -dx);
                var h     = (angle + (float)Math.PI) / (2f * (float)Math.PI);

                this.Hue = h;
                break;

            case UIGestureRecognizerState.Failed:
            case UIGestureRecognizerState.Cancelled:
                break;

            default:
                break;
            }
        }
        private void DrawBlankMiddleCircle()
        {
            var size = new SizeF(this.Bounds.Size.Width - 40f, this.Bounds.Size.Height - 40f);

            UIGraphics.BeginImageContextWithOptions(size, false, 0f);
            UIColor.Clear.SetFill();
            UIGraphics.RectFill(new RectangleF(0f, 0f, size.Width, size.Height));

            var radius = (nfloat)(Math.Min(size.Width, size.Height) / 2);
            var angle  = 2f * (float)Math.PI / 1;

            var center     = new PointF(size.Width / 2, size.Height / 2);
            var bezierPath = UIBezierPath.FromArc(center, radius, 0, 1 * angle, true);

            bezierPath.AddLineTo(center);
            bezierPath.ClosePath();

            var color = UIColor.FromRGB(83, 83, 83);

            color.SetFill();
            color.SetStroke();

            bezierPath.Fill();
            bezierPath.Stroke();

            var img = UIGraphics.GetImageFromCurrentImageContext();

            UIGraphics.EndImageContext();

            img.Draw(new PointF(20f, 20f));
        }
        private void DrawHueCircle()
        {
            var size = new SizeF(this.Bounds.Size.Width, this.Bounds.Size.Height);

            UIGraphics.BeginImageContextWithOptions(size, true, 0f);
            UIColor.FromRGB(83, 83, 83).SetFill();
            UIGraphics.RectFill(new RectangleF(0f, 0f, size.Width, size.Height));

            var          sectors = 180;
            var          radius  = (nfloat)(Math.Min(size.Width, size.Height) / 2);
            var          angle   = 2f * (float)Math.PI / sectors;
            UIBezierPath bezierPath;

            for (var i = 0; i < sectors; i++)
            {
                var center = new PointF(size.Width / 2, size.Height / 2);
                bezierPath = UIBezierPath.FromArc(center, radius, i * angle, (i + 1) * angle, true);
                bezierPath.AddLineTo(center);
                bezierPath.ClosePath();

                var color = UIColor.FromHSBA((float)i / sectors, 1f, 1f, 1f);
                color.SetFill();
                color.SetStroke();

                bezierPath.Fill();
                bezierPath.Stroke();
            }

            var img = UIGraphics.GetImageFromCurrentImageContext();

            UIGraphics.EndImageContext();

            img.Draw(new PointF(0f, 0f));
        }
        void AdjustAnchorPointForGestureRecognizer(UIGestureRecognizer gestureRecognizer)
        {
            if (gestureRecognizer.State == UIGestureRecognizerState.Began)
            {
                UIView piece               = gestureRecognizer.View;
                PointF locationInView      = gestureRecognizer.LocationInView(piece);
                PointF locationInSuperview = gestureRecognizer.LocationInView(piece.Superview);

                piece.Layer.AnchorPoint = new PointF(locationInView.X / piece.Bounds.Size.Width, locationInView.Y / piece.Bounds.Size.Height);
                piece.Center            = locationInSuperview;
            }
        }
        void PanGestureMoveAround(UIPanGestureRecognizer gesture)
        {
            UIView piece = gesture.View;

            AdjustAnchorPointForGestureRecognizer(gesture);

            if (gesture.State == UIGestureRecognizerState.Began || gesture.State == UIGestureRecognizerState.Changed)
            {
                PointF translation = gesture.TranslationInView(piece.Superview);

                piece.Center = new PointF(piece.Center.X, piece.Center.Y + translation.Y);

                gesture.SetTranslation(new PointF(0, 0), piece.Superview);
            }
            else if (gesture.State == UIGestureRecognizerState.Ended)
            {
                SlideAndFix(gesture);
            }
        }
示例#6
0
 public static PointF ToPointF(this global::CoreGraphics.CGPoint r)
 {
     return(new PointF((float)r.X, (float)r.Y));
 }
        public void HandleLongPressGesture(UILongPressGestureRecognizer recognizer)
        {
            var point = recognizer.LocationInView(_paletteView);

            switch (recognizer.State)
            {
            case UIGestureRecognizerState.Began:
            {
                if (_currentView == null)
                {
                    var touchedView = _paletteView.HitTest(point, null);

                    if (!touchedView.Equals(_paletteView))
                    {
                        UIView.Animate(0.5, () =>
                            {
                                _previousDeleteViewFrame = _deleteView.Frame;
                                var frame = _deleteView.Frame;
                                frame.Y   = frame.Y - 190f;

                                _deleteView.Frame = frame;
                                _paletteView.BringSubviewToFront(_deleteView);
                            });

                        _paletteView.BringSubviewToFront(touchedView);
                        _currentView   = touchedView;
                        _previousView  = touchedView;
                        _previousPoint = touchedView.Center;
                    }
                }
            }
            break;

            case UIGestureRecognizerState.Changed:
            {
                if (_currentView != null)
                {
                    var center = _currentView.Center;
                    center.X += point.X - _previousView.Center.X;
                    center.Y += point.Y - _previousView.Center.Y;

                    _currentView.Center = center;
                }
            }
            break;

            case UIGestureRecognizerState.Ended:
            {
                if (_currentView != null)
                {
                    var deletePoint = recognizer.LocationInView(_deleteView);

                    if (_deleteView.Bounds.Contains(deletePoint))
                    {
                        var temp  = _currentView.Layer.Sublayers.First().Name.Split(new char[] { '_' });
                        var index = int.Parse(temp[1]);
                        var color = _colors.ElementAt(index);
                        _colors.Remove(color.Key);

                        _favoriteColorManager.Delete(color.Key);

                        ClearColorGrid();
                        SetColorGrid();
                    }

                    _currentView.Center = _previousPoint;
                    _currentView        = null;

                    UIView.Animate(0.5, () =>
                        {
                            _deleteView.Frame = _previousDeleteViewFrame;
                        });
                }
            }
            break;
            }
        }