Я занимаюсь разработкой настольной игры для iOS. Я пытаюсь придать доске своего рода «текстуру».
Я создал это очень маленькое изображение (очень маленькое, обязательно внимательно):
И я передал это изображение инициализатору UIColor.init(patternImage:)
, чтобы создать UIColor
, то есть это изображение. Я использовал это UIColor
, чтобы заполнить квадрат UIBezierPath
с, и результат выглядит так:
Все копии этого изображения выстраиваются идеально и образуют много диагональных прямых линий. Пока все хорошо.
Теперь на iPad квадраты, которые я рисую, будут больше, а границы этих квадратов тоже будут больше. Я успешно рассчитал, какой должна быть ширина и размер обводки квадратов, так что это не проблема.
Однако, поскольку на iPad квадратов больше, на квадрат будет больше диагональных линий. Я не хочу этого. Мне нужно изменить очень маленькое изображение на большее, и этот размер зависит от ширины штрихов квадратов. В частности, ширина измененного изображения должна быть в два раза больше ширины обводки.
Я написал это расширение, чтобы изменить размер изображения, адаптированный из этого поста :
extension UIImage {
func resized(toWidth newWidth: CGFloat) -> UIImage {
let scale = newWidth / size.width
let newHeight = size.height * scale
UIGraphicsBeginImageContextWithOptions(CGSize(width: newWidth, height: newHeight), false, 0)
self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
}
И назвал это так:
// this is the code I used to draw a single square
let path = UIBezierPath(rect: CGRect(origin: point(for: Position(x, y)), size: CGSize(width: squareLength, height: squareLength)))
UIColor.black.setStroke()
path.lineWidth = strokeWidth
// this is the line that's important!
UIColor(patternImage: #imageLiteral(resourceName:
"текстура"). Resized (toWidth: strokeWidth * 2)). SetFill ()
path.fill ()
path.stroke ()
Теперь игровое поле на iPhone выглядит следующим образом:
Возможно, вам придется немного увеличить масштаб веб-страницы, чтобы понять, что я имею в виду. Доска теперь выглядит крайне некрасиво. Вы можете увидеть «границы» каждой копии изображения. Я не хочу этого Хотя на iPad плата выглядит хорошо. Я подозреваю, что это происходит только тогда, когда я уменьшаю размер изображения.
Я подумал, что это может быть связано с сглаживанием, которое происходит, когда я использую расширение. Я нашел этот пост и этот пост об удалении сглаживания, но первый, кажется, делает это в виде изображения, в то время как я делаю это в методе draw(_:)
моего пользовательского GameBoardView
. Решение последнего похоже на то, что я использую.
Как я могу изменить размер без сглаживания? Или на более высоком уровне абстракции, как я могу сделать мою доску красивой?