2017-08-14 4 views
0

J'essaie de placer un CGPath sur un cercle à un angle donné. Le chemin ressemble plus à un rectangle. Quand j'ai fini de créer mon chemin, je me déplace au centre du cercle et en tire le chemin. Mais je veux placer le centre gauche du rectangle pour l'aligner avec le centre du cercle, pas le coin supérieur gauche. Je suppose, je devrais calculer l'origine du rectangle par rapport à l'angle donné en appliquant une formule, je n'ai aucune idée de la façon de le faire.Dessine un rectangle à l'intérieur d'un cercle par rapport à son centre

//My logic to draw the circle goes here 
.... 
    //My custom rect drawing logic is inside the CreatePath method 
    CGPath customRectPath = CreatePath(size); 
    context.TranslateCTM(center.X, center.Y);//I am sure this is where I am doing it wrong 
    context.RotateCTM((float)(angle)); 
    context.AddPath(customRectPath); 
    context.DrawPath(CGPathDrawingMode.EOFill); 

L'image doit expliquer ce que j'essaie de dire.

enter image description here

+0

Démarrer [ici] (https://stackoverflow.com/a/8536553/1971013) Je suis sûr que vous pouvez vous débrouiller seul. –

Répondre

1

TranslateCTM définit la traduction du coin haut à gauche de votre rectangle, pas le milieu du côté gauche (que vous voulez). Pour cela, il suffit enlever moitié la hauteur du rectangle de la y-offset:

context.TranslateCTM(center.X, center.Y - size.Height/2);

0

Vous devez créer le rectangle afin qu'il soit par rapport à l'origine de la rotation.

Par exemple, les coins de la rect

0, - width/2  // top left 
size , - width/2 // top right 
size, width /2,  // bottom right 
0, width/2  // bottom left 

Toute forme que vous avez l'intention de transformer devrait être créé par rapport à la rotation prévue et l'origine de l'échelle.