Перетащите шарик по кругу в iOS. Xamarin (монотуш) - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в платформе Xamarin iOS. Я хочу перетащить мяч за границу круга. Пожалуйста, найдите ниже изображение для более подробной информации. Заранее спасибо :) enter image description here

1 Ответ

0 голосов
/ 04 мая 2018

Я просто конвертирую Swift в C #, код источника здесь .

nfloat midViewX;
nfloat midViewY;

UIBezierPath circlePath2;
CAShapeLayer shapeLayer2 = new CAShapeLayer();

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    midViewX = UIScreen.MainScreen.Bounds.Width / 2;
    midViewY = UIScreen.MainScreen.Bounds.Height / 2;

    var circlePath = UIBezierPath.FromArc(new CGPoint(midViewX, midViewY), 100, 0, (nfloat)(Math.PI*2), true);
    var shapeLayer = new CAShapeLayer();
    shapeLayer.Path = circlePath.CGPath;
    shapeLayer.FillColor = UIColor.Clear.CGColor;
    shapeLayer.StrokeColor = UIColor.Red.CGColor;
    shapeLayer.LineWidth = 3;
    View.Layer.AddSublayer(shapeLayer);

    var angleEarthAfterCalculate = (nfloat)(180 * Math.PI / 180 - Math.PI / 2);
    var earthX = midViewX + Math.Cos(angleEarthAfterCalculate) * 100;
    var earthY = midViewY + Math.Sin(angleEarthAfterCalculate) * 100;

    circlePath2 = UIBezierPath.FromArc(new CGPoint(earthX, earthY), 10, 0, (nfloat)(Math.PI * 2), true);

    shapeLayer2.Path = circlePath2.CGPath;
    shapeLayer2.FillColor = UIColor.Blue.CGColor;
    shapeLayer2.StrokeColor = UIColor.Clear.CGColor;
    shapeLayer2.LineWidth = 7;
    View.Layer.AddSublayer(shapeLayer2);

    var dragBall = new UIPanGestureRecognizer(DragBall);
    View.AddGestureRecognizer(dragBall);
}

void DragBall(UIPanGestureRecognizer recognizer)
{
    var point = recognizer.LocationInView(View);
    var earthX = point.X;
    var earthY = point.Y;
    var midViewXDouble = midViewX;
    var midViewYDouble = midViewY;
    var angleX = earthX - midViewXDouble;
    var angleY = earthY - midViewYDouble;
    var angle = Math.Atan2(angleY, angleX);
    var earthX2 = midViewXDouble + Math.Cos(angle) * 100;
    var earthY2 = midViewYDouble + Math.Sin(angle) * 100;

    circlePath2 = UIBezierPath.FromArc(new CGPoint(earthX2, earthY2), 10, 0, (nfloat)(Math.PI * 2), true);
    shapeLayer2.Path = circlePath2.CGPath;
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...