Я проверяю, является ли изображение вертикальным или горизонтальным. Если он горизонтальный, я поворачиваю его:
@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.
Как вы это делаете, не могли бы вы привести мне пример, пожалуйста?
«Я проверяю, является ли изображение вертикальным или горизонтальным. Если оно горизонтально, я поворачиваю его». Нет, вы этого не делали. Вы вращаете представление изображения (которое вы ошибочно назвали img
. Вам нужно повернуть только изображение и оставить представление изображения в покое.
Попробуйте это, объявите свой 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
}
}
это нормальный результат (без вызова расширения поворота изображения) и повернутый (с вызовом расширения поворота изображения):
Спасибо, Фабио, выглядит отлично, попробую в понедельник ;-) Хотя я надеялся, что есть более простой способ сделать это, без необходимости писать весь этот код, чтобы просто крутить полноэкранное фото.
рассчитать соотношение сторон изображения по ширине и высоте, затем дать изображению ширину всего экрана и высоту относительно ширины, используя соотношение сторон