Uibezierpath и Applytransform
-
26-10-2019 - |
Вопрос
Я пытаюсь внедрить пользовательский Uiview, который представляет собой в основном меню пирога (что -то вроде торта, разделенного на ломтики).
Для этого я пытаюсь нарисовать круг и серию линий из центра, как лучи в колесе диаграммы.
Я успешно нарисовал круг, и теперь я хотел бы нарисовать линии, делящие круг на ломтики.
Это то, что у меня есть до сих пор:
-(void)drawRect:(CGRect)rect{
[[UIColor blackColor] setStroke];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat minDim = (rect.size.width < rect.size.height) ? rect.size.width : rect.size.height;
CGRect circleRect = CGRectMake(0, rect.size.height/2-minDim/2, minDim, minDim);
CGContextAddEllipseInRect(ctx, circleRect);
CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor yellowColor] CGColor]));
CGContextFillPath(ctx);
CGPoint start = CGPointMake(0, rect.size.height/2);
CGPoint end = CGPointMake(rect.size.width, rect.size.height/2);
for (int i = 0; i < MaxSlices(6); i++){
CGFloat degrees = 1.0*i*(180/MaxSlices(6));
CGAffineTransform rot = CGAffineTransformMakeRotation(degreesToRadians(degrees));
UIBezierPath *path = [self pathFrom:start to:end];
[path applyTransform:rot];
}
}
- (UIBezierPath *) pathFrom:(CGPoint) start to:(CGPoint) end{
UIBezierPath* aPath = [UIBezierPath bezierPath];
aPath.lineWidth = 5;
[aPath moveToPoint:start];
[aPath addLineToPoint:end];
[aPath closePath];
[aPath stroke];
return aPath;
}
Проблема в том, что Apply Transform на пути, похоже, ничего не делает. Первый гест пути, нарисованный правильно, и следующие из них не зависят от вращения. В основном то, что я вижу, является всего лишь одним путем. Проверьте снимок экрана здесь http://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png
Спасибо за помощь!
Решение
Вы рисуете путь (с stroke
), прежде чем преобразовать его. Путь - это просто математическое представление. Это не линия "на экране". Вы не можете переместить то, что вы уже нарисовали, изменив данные об этом.
Просто переместите [aPath stroke]
снаружи pathFrom:to:
и положить его после applyTransform:
.