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); } }
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; } }