Swift: сохранить десятичную с плавающей запятой в autolayout - PullRequest
0 голосов
/ 05 сентября 2018

это продолжение вопроса из моего поста здесь . Я пытаюсь динамически исправить высоту ограничения 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) фактически теряет точность и приводит к потере разрешения. Есть ли способ устранить это? Изображение результата здесь.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...