ОБНОВЛЕНИЕ: Мне удалось запустить ваш код с помощью нескольких настроек - откуда взялся CGImageGetSize ()?- и я действительно не вижу проблемы, кроме столбцов не все точно даже в очень маленьких размерах.Вот только как это должно работать.Единственный способ обойти это - либо исправить масштабирование, чтобы оно было кратным целому числу размера изображения - другими словами, получить наибольшее целое число, кратное размеру изображения, меньшему, чем размер представления, или уменьшить количество линий, нарисованных на экране, на оченьнебольшие размеры, чтобы избавиться от этого артефакта.Есть причина, по которой пиксельная сетка становится видимой только при большом увеличении в большинстве редакторов.Не говоря уже о том, что если сетка все еще видна с разрешением 3-4x, вы делаете просмотр слишком занятым.
Я не смог запустить предоставленный вами код, потому что есть куча классовивары там, но с беглого взгляда я бы сказал, что это как-то связано с рисованием на границах пикселей.После округления до целого числа, чтобы избавиться от нечетких артефактов АА (я заметил, что вы отключили АА, но в идеале вам не нужно этого делать), вам нужно добавить 0,5 к исходной точке, чтобы нарисовать линию в центр пикселя, а не на границе .
Примерно так:
+---X---+---+---+---+---+
| | | | Y | | |
+---+---+---+---+---+---+
X : CGPoint (1, 1)
Y : CGPoint (3.5, 0.5)
Вы хотите нарисовать из центра пикселя,потому что в противном случае ваша линия пересекает два пикселя.
Другими словами, где вы устанавливаете xPoints и yPoints, убедитесь, что floor () или round () ваши значения, а затем добавьте 0.5.