Положение дуги на круге - PullRequest
0 голосов
/ 05 января 2012

У меня есть круг размером несколько пикселей (круг основан на UIBezierPath). Я должен поместить дугу (которая в основном является подклассом UIView с пользовательским рисунком) на круг, чтобы дуга покрывала круг. Я знаю, как рассчитать поворот дуги и положение, но что-то не так. Я имею в виду, я знаю причину - это свойство beacause center, которое назначается центру UIView, если бы это был центр дуги, все было бы здорово. Но это не так.

Я также знаю, как это решить. Я должен рассчитать меньший радиус, где я буду ставить дуги. Но как это сделать. В принципе это кажется легким, но из-за дуги в прямоугольном UIView становится немного сложнее. Я покажу вам несколько изображений, чтобы вы могли увидеть проблему.

enter image description here enter image description here

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Самый простой способ сделать это - изменить опорную точку каждого слоя вида дуги. Вы можете прочитать о точке привязки здесь если вы уже не знаете об этом. Вам нужно будет добавить платформу QuartzCore к вашей цели сборки и добавить #import <QuartzCore/QuartzCore.h>.

CGRect circleBounds = circleView.bounds;

topArcView.layer.anchorPoint = CGPointMake(.5, 0);
topArcView.layer.position = CGPointMake(CGRectGetMidX(circleBounds), 0);

bottomArcView.layer.anchorPoint = CGPointMake(.5, 1);
bottomArcView.layer.position = CGPointMake(CGRectGetMidX(circleBounds), CGRectGetMaxY(circleBounds));

leftArcView.layer.anchorPoint = CGPointMake(0, .5);
leftArcView.layer.position = CGPointMake(circleBounds.origin.x, CGRectGetMidY(circleBounds));

rightArcView.layer.anchorPoint = CGPointMake(1, .5);
rightArcView.layer.position = CGPointMake(CGRectGetMaxX(circleBounds), CGRectGetMidY(circleBounds));
0 голосов
/ 05 января 2012

Возможно, вы могли бы сделать подкласс UIView того же размера и центральной точки, что и прямоугольник круга.Затем нарисуйте дугу в правильном месте.

...