Если вы рисуете штрихами, как предлагает @NSGod, вам нужно перейти к верхнему или нижнему краю, а затем провести линию к наконечнику стрелки, а затем к нижнему или верхнему краю. Если вы хотите получить угол в 45 градусов, как тот, который вы нарисовали, сумма, которую вы добавляете или вычитаете из координат, должна быть одинаковой.
Вам также нужно будет установить ширину линии для пути. Это должно быть пропорционально размеру.
CGPoint origin = CGPointMake(100, 20);
UIBezierPath *path = [UIBezierPath bezierPath];
// Upper tip
[path moveToPoint:CGPointMake(origin.x+20, origin.y-20)];
// Arrow head
[path addLineToPoint:CGPointMake(origin.x, origin.y)];
// Lower tip
[path addLineToPoint:CGPointMake(origin.x+20, origin.y+20)];
[[UIColor redColor] set];
// The line thickness needs to be proportional to the distance from the arrow head to the tips. Making it half seems about right.
[path setLineWidth:10];
[path stroke];
В результате получилась такая форма.
Если вы хотите заполнить, а не обводку - что может потребоваться, если вы хотите очертить стрелку - вам нужно будет нанести 6 точек, а затем замкнуть путь.
Ответ 2 · рейтинг 3 · NSGod
Одна потенциальная часть проблемы заключается в том, что вы использовали fill вместо stroke.
Изменив [path fill] на [path stroke], вы получили бы следующее:
Это поднимает вопрос о том, что вы имели в виду под точкой origin. Это действительно будет переводиться в точку стрелки, а не в традиционном понимании того, как используется исходная точка (будет означать верхний левый угол рисуемого объекта).
Если вы хотите сохранить свое значение origin, вам нужно изменить код следующим образом: