Как вы отображаете изображение на максимально доступном пространстве?

Я проверяю, является ли изображение вертикальным или горизонтальным. Если он горизонтальный, я поворачиваю его:

@IBOutlet private weak var img: UIImageView!

img.image = file.image    
let imageSize = file.image?.size
let imgWidth = imageSize?.width ?? 0
let imgHeight = imageSize?.height ?? 0
                    
if imgWidth > imgHeight {
    print("IMG HORIZONTAL")
    imgDetail.transform = imgDetail.transform.rotated(by: .pi / 2)
} else {
    print("IMG VERTICAL")
}

Но это оставляет мне пространство вокруг изображения. Я хотел бы, чтобы он был с максимальным размером UIImageView.

рассчитать соотношение сторон изображения по ширине и высоте, затем дать изображению ширину всего экрана и высоту относительно ширины, используя соотношение сторон

birkoof 11.11.2022 10:56

Как вы это делаете, не могли бы вы привести мне пример, пожалуйста?

iosSwift 11.11.2022 10:59

«Я проверяю, является ли изображение вертикальным или горизонтальным. Если оно горизонтально, я поворачиваю его». Нет, вы этого не делали. Вы вращаете представление изображения (которое вы ошибочно назвали img. Вам нужно повернуть только изображение и оставить представление изображения в покое.

matt 11.11.2022 13:58
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте это, объявите свой imageView:

let YourImageView: UIImageView = {
    let iv = UIImageView()
    iv.image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)
    iv.backgroundColor = .clear
    iv.contentMode = .scaleAspectFit
    iv.isUserInteractionEnabled = true
    iv.clipsToBounds = true
    iv.translatesAutoresizingMaskIntoConstraints = false
    
    return iv
}()

в viewDidLoad установите оператор if и вызовите setupConstraints:

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundColor = .white
    
    guard let imgWidth = YourImageView.image?.size.width else { return }
    guard let imgHeight = YourImageView.image?.size.height else { return }

    if imgWidth > imgHeight {
        print("IMG HORIZONTAL")
        guard let image = YourImageView.image else { return }
        let newImage = image.rotate(radians: .pi / 2) // image rotation
        YourImageView.image = newImage
    } else {
        print("IMG VERTICAL")
    }
    
    setupConstraints()
}

установить ограничения

fileprivate func setupConstraints() {
    
    view.addSubview(YourImageView)
    YourImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    YourImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    YourImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    YourImageView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
}

написать расширение изображения

extension UIImage {
func rotate(radians: Float) -> UIImage? {
    var newSize = CGRect(origin: CGPoint.zero, size: self.size).applying(CGAffineTransform(rotationAngle: CGFloat(radians))).size
    // Trim off the extremely small float value to prevent core graphics from rounding it up
    newSize.width = floor(newSize.width)
    newSize.height = floor(newSize.height)

    UIGraphicsBeginImageContextWithOptions(newSize, false, self.scale)
    guard let context = UIGraphicsGetCurrentContext() else { return UIImage()}

    // Move origin to middle
    context.translateBy(x: newSize.width/2, y: newSize.height/2)
    // Rotate around middle
    context.rotate(by: CGFloat(radians))
    // Draw the image at its center
    self.draw(in: CGRect(x: -self.size.width/2, y: -self.size.height/2, width: self.size.width, height: self.size.height))

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
 }
}

это нормальный результат (без вызова расширения поворота изображения) и повернутый (с вызовом расширения поворота изображения):

Спасибо, Фабио, выглядит отлично, попробую в понедельник ;-) Хотя я надеялся, что есть более простой способ сделать это, без необходимости писать весь этот код, чтобы просто крутить полноэкранное фото.

iosSwift 12.11.2022 18:29

Другие вопросы по теме