Рисование моста с помощью 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 их, точно узнать, где ваши расчеты не так.