Ну, вопрос был сделан несколько лет назад, но есть еще один способ объяснить, что здесь происходит.
Попробуйте следующую команду:
console.log("Hello World") || "Bye World";
Как упоминалось выше console.log()
обычно возвращает undefined
, и вы можете выбрать лучшее возвращаемое значение. Поскольку нестрогое (абстрактное) сравнение считает undefined
равным false
, оператор ||
разрешает вам этот выбор.
Учитывая, что это всего лишь инструмент отладки, в этом нет необходимости, но помогает понять, что консоль отображает текст, отправленный в stdout, а также вычисляет команду и отображает возвращаемое значение, или undefined, если значение не было получено.
Мне удалось создать обходной путь для этого. Я могу проверить ожидаемый размер моего изображения в layoutSubviews
, и если он не соответствует размеру UIImage
, я могу использовать UIGraphicsImageRenderer
, чтобы создать новое изображение, масштабированное до правильного размера. Я создал расширение UIImage
для облегчения этого:
extension UIImage {
internal func imageScaled(toSize scaledSize: CGSize) -> UIImage {
let renderer = UIGraphicsImageRenderer(size: scaledSize)
let newImage = renderer.image { [unowned self] _ in
self.draw(in: CGRect(origin: .zero, size: scaledSize))
}
return newImage
}
}
Теперь мой обновленный метод layoutSubviews
выглядит следующим образом:
public override func layoutSubviews() {
super.layoutSubviews()
// Layout circle
let path = UIBezierPath(ovalIn: bounds.insetBy(dx: lineWidth.mid, dy: lineWidth.mid))
circleLayer.path = path.cgPath
// Layout check
if let checkImage = checkImage, checkImage.size != checkImageSize {
checkLayer.contents = checkImage.imageScaled(toSize: checkImageSize).cgImage
}
let checkOrigin = CGPoint(x: bounds.midX - checkImageSize.midW, y: bounds.midY - checkImageSize.midH)
checkLayer.frame = CGRect(origin: checkOrigin, size: checkImageSize)
}
Это приводит к хорошему четкому изображению: