Я хочу рисовать мозаичные изображения, а затем преобразовывать их с помощью обычных жестов панорамирования и масштабирования. Проблема, которая привела меня сюда, заключается в том, что всякий раз, когда я выполняю масштабирование большого количества знаков после запятой, в середине плитки появляется тонкая линия пикселей (1 или 2). Мне удалось изолировать проблему следующим образом:
CGContextSaveGState(UIGraphicsGetCurrentContext());
CGContextSetFillColor(UIGraphicsGetCurrentContext(), CGColorGetComponents([UIColor redColor].CGColor));
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);//rect from drawRect:
float scale = 0.7;
CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(50, 50, 100, 100), testImage);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(150, 50, 100, 100), testImage);
CGContextRestoreGState(UIGraphicsGetCurrentContext());
При масштабе 0,7 два изображения отображаются правильно мозаично:
При масштабе 0,777777 (изменение строки 6 на «масштаб с плавающей запятой = 0,777777;») появляется визуальный артефакт:
Есть ли способ избежать этой проблемы? Это происходит с CGImage, CGLayer и примитивными формами, такими как прямоугольник. Это также происходит в MacOSx.
Спасибо за помощь!
редактировать: добавлено, что это также происходит с примитивной формой, такой как CGContextFillRect
edit2: Это также происходит в MacOSx!