Рисование моста с помощью Quartz 2D

Я пытаюсь нарисовать следующее изображение:

Используя этот код target-c:

CGContextSetFillColorWithColor(ctx, [[UIColor redColor] CGColor]);
CGContextMoveToPoint(ctx, position.X - (size.width / 2), position.Y - (size.height / 2));
CGContextAddLineToPoint(ctx, position.X - (size.width / 2), position.Y + (size.height / 2));
CGContextAddLineToPoint(ctx, position.X - (size.width / 4), position.Y + (size.height / 2));
CGContextAddArc(ctx, position.X, position.Y + (size.height / 2), (size.width / 4), -M_PI, M_PI, 0);
CGContextAddLineToPoint(ctx, position.X + (size.width / 2), position.Y + (size.height / 2));
CGContextAddLineToPoint(ctx, position.X + (size.width / 2), position.Y - (size.height / 2));
CGContextFillPath(ctx);

Но это не работает. Я получаю это изображение:

Ширина изображения - size.width, а высота - size.height. Происхождение (position.X, position.Y), Эта точка находится в центре, в (size.width /2, size.height / 2).

Первая точка - верхний левый угол, а вторая - нижний левый угол. И затем продолжает направо.

Вот лучшее объяснение:

Извините за мой английский.

Любой совет?

3 ответа

Решение

Я изменил эту строку:

CGContextAddArc(ctx, position.X, position.Y + (size.height / 2), (size.width / 4), -M_PI, M_PI, 0);

Со следующим:

CGContextAddArc(ctx, position.X, position.Y + (size.height / 2), (size.width / 4), -M_PI, 0, 0);

И теперь это работает!!! У меня была ошибка со вторым углом. Вместо M_PIправильный 0.

Вы указали: ширина изображения size.width, а высота size.height. Начало координат (position.X, position.Y), и эта точка находится в центре, в (size.width /2, size.height / 2).

Первая мысль заключается в том, что в целом ваша центральная точка на самом деле находится в (position.X + size.width/2.0, position.Y + size.width/2.0) (заверните это в floorf, если хотите).

Если это не сработает, я советую создать CGPoint, CGRect и т. Д. Для каждого промежуточного значения, чтобы сделать все ваши вычисления явными. Тогда, если это необходимо, вы можете NSLog их, точно узнать, где ваши расчеты не так.

Помогает ли это изменить порядок следования точек?

Другие вопросы по тегам