Этот раздел был поцарапан один или два раза, но я все еще озадачен. И Google тоже не был дружелюбен.Как настроить систему координат Quartz2D с масштабированием, что позволяет избежать нечеткого рисования?
Поскольку кварц допускает использование произвольных систем координат с использованием аффинных преобразований, я хочу иметь возможность рисовать такие объекты, как планы этажей, используя реальную координату, например. ноги.
В основном, для примера, я хочу масштабировать вид, чтобы при рисовании прямоугольника 10x10 (например, 10-дюймовый ящик) я получаю прямоугольник размером 60x60 пикселей.
Это работает, за исключением прямоугольника, который я получаю, довольно нечеткий. Другой вопрос здесь получил ответ, который объясняет, почему. Однако я не уверен, что понял эту причину, и, более того, я не знаю, как это исправить. Вот мой код:
Я поставил свою систему координат в моем awakeFromNib
пользовательский метод просмотра:
- (void) awakeFromNib {
CGAffineTransform scale = CGAffineTransformMakeScale(6.0, 6.0);
self.transform = scale;
}
И вот моя ничья рутина:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect r = CGRectMake(10., 10., 10., 10.);
CGFloat lineWidth = 1.0;
CGContextStrokeRectWithWidth(context, r, lineWidth);
}
Квадратная я масштабируется просто отлично , но совершенно нечеткие. Игра с lineWidth
не помогает: когда lineWidth
установлен меньше, он становится легче, но не более четким.
Итак, есть способ настроить вид на масштабированную систему координат, чтобы я мог использовать координаты моего домена? Или мне нужно вернуться и внедрить масштабирование в мои программы рисования?
Обратите внимание, что эта проблема не возникает для перевода или вращения.
Благодаря
Если вы хотите установить ширину линии в точках независимо от масштабного коэффициента, установите ее на «желаемое количество точек/масштабный коэффициент». Примеры: Значение по умолчанию - 1 pt/1 × = 1; линия 1-pt на вашем 6 × -факторе равна '1.0/6.0'; строка 2-pt будет '2.0/6.0'. –