2017-06-12 2 views
0

Je veux tracer un chemin sur une image qui représente une barre de progression semi dans Xamarin. Ensuite, cela fonctionne pour le haut. Mais maintenant je veux dessiner le bas. Maintenant, je veux dessiner le fond. Mais j'ai essayé essayé et essayé encore sans rien trouver.Xamarin iOS UIBezierPath changer de direction vers le bas

L'image va vous expliquer. Image

Le code:

public CircleGraph(UIImageView imageView, int lineWidth, float percentComplete) : base(imageView.Frame) 
{ 
    Initialise(imageView, lineWidth, percentComplete); 
} 

void Initialise(UIImageView imageView, int lineWidth, float percentComplete) 
{ 
    _lineWidth = lineWidth; 
    _percentComplete = percentComplete; 
    this.BackgroundColor = UIColor.Clear; 

    this.backgroundImage = imageView; 
    Add(backgroundImage); 

    centerPoint = new CGPoint(Bounds.GetMidX(), Bounds.Height); 
    maskLayer = new CAShapeLayer(); 
    maskLayer.FillColor = UIColor.Blue.CGColor; 
    maskLayer.StrokeColor = UIColor.Black.ColorWithAlpha(.5f).CGColor; 
    maskLayer.LineWidth = _lineWidth; 
    maskLayer.LineCap = CAShapeLayer.CapButt; 

    this.Layer.Mask = maskLayer; 
} 

public void SetClipping(float percentComplete) { 
    _percentComplete = percentComplete; 
    SetNeedsDisplay(); 
} 

public override void Draw(CoreGraphics.CGRect rect) 
{ 
    base.Draw(rect); 

    using (CGContext g = UIGraphics.GetCurrentContext()) 
    { 
     _radius = (int)(this.Bounds.Width/2) - _lineWidth/2; 

     // Top 
     var startAngle = -(float)Math.PI; 
     var endAngle = startAngle + HALF_CIRCLE * _percentComplete; 

     maskPath = new UIBezierPath(); 
     maskPath.AddArc(centerPoint, _radius, startAngle, endAngle, false); 
     maskLayer.Path = maskPath.CGPath; 
    }; 
} 

Merci beaucoup!

Répondre

0

Je l'ai trouvé!

Il suffit de mettre centerPoint de votre taille à 0, puis jouer avec startAngle, endAngle et dans le sens des aiguilles d'une montre et cela fonctionne!