Рисование моста с помощью Quartz 2D - PullRequest
3 голосов
/ 19 июня 2011

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

enter image description here

Используя этот код объектива-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);

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

enter image description here

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

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

Вот лучшее объяснение: enter image description here

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

Любой совет?

Ответы [ 3 ]

2 голосов
/ 19 июня 2011

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

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.

0 голосов
/ 19 июня 2011

Исправляет ли обратный порядок рисования точек?

0 голосов
/ 19 июня 2011

Вы заявили: Ширина изображения - 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 их, точно узнать, где ваши расчеты не так.

...