это продолжение вопроса из моего поста здесь . Я пытаюсь динамически исправить высоту ограничения imageView в зависимости от размера моего изображения, а затем добавить поверх него слой для рисования. Однако я заметил, что размер imageView теряет точность из-за разделения плавающей запятой, и это приводит к размытому изображению, когда я начинаю рисовать на своем изображении, то есть расположение растрового изображения не совсем в том положении, в котором оно было наложено на исходное изображение.
Мой код как таковой, с инструкциями печати для соблюдения десятичных знаков.
func setupViews() {
view.backgroundColor = .black
view.addSubview(canvasImageView)
canvasImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
canvasImageView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
canvasImageView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
let aspectRatio = getImageAspectRatio(image: image)
let screenWidth = UIScreen.main.bounds.width
let height = CGFloat(1.0) / CGFloat(aspectRatio) * CGFloat(screenWidth)
canvasImageView.heightAnchor.constraint(equalToConstant: height).isActive = true
print("ImageSize", image.size.height)
print("Aspect Ratio image at start:", aspectRatio)
print("Calculated height:", height)
DispatchQueue.main.async {
print("Aspect Ratio imageView at start:", self.getAspectRatio(frame: self.canvasImageView.frame))
print("ImageViewSize", self.canvasImageView.frame.height)
}
}
Мои печатные заявления здесь:
ImageSize 3000.0 2002.0
Aspect Ratio image at start: 1.4985014985015
Calculated height: 213.546666666667
Aspect Ratio imageView at start: 1.49532710280374
ImageViewSize 320.0 214.0
Как видите, моя попытка сделать heightAnchor.constraint(equalToConstant: height)
фактически теряет точность и приводит к потере разрешения. Есть ли способ устранить это? Изображение результата здесь.