Ответ 1
Вы можете рассчитать его вручную для размеров кадров UIImageView, которые Aspect Fit с вашим изображением, или использовать AVMakeRectWithAspectRatioInsideRect (метод от AVFoundation).
Я создал UIImageView
и назначил ему UIImage
. Я установил режим содержимого UIImageView на Aspect Fit
. Как удалить прописку из верхней и нижней части изображения или как изменить размер UIImageView
для обертки вокруг изображения? Я пробовал все.
Если вы собираетесь сказать, чтобы получить новый размер изображения, это не сработает. Получение размера изображения внутри UIImageView
дает только ширину и высоту исходного изображения.
Пожалуйста, не связывайте другие сообщения. Я их уже прочитал. Они не работают.
Вы можете рассчитать его вручную для размеров кадров UIImageView, которые Aspect Fit с вашим изображением, или использовать AVMakeRectWithAspectRatioInsideRect (метод от AVFoundation).
Итак, скажем, у вас установлен UIImageView равным ширине относительно представления. Одним из способов перерисовки изображения в соответствии с этим было бы использование Core Graphics. Что вы делаете, так это рассчитать масштабный коэффициент, необходимый для правильной покраски изображения. Здесь вы можете найти отличные образцы:
и хороший учебник с бенчмарками для лучшего понимания вещей:
http://nshipster.com/image-resizing/
Образец кода, который я использовал (который в основном является одним из методов github, изменяется в соответствии с моими потребностями):
let image = UIImage(data: data!)
let oldWidth = image!.size.width
let scaleFactor = UIWindow().screen.bounds.width / oldWidth
let cgImage = image!.CGImage
let width = Double(CGImageGetWidth(cgImage)) * Double(scaleFactor)
let height = Double(CGImageGetHeight(cgImage)) * Double(scaleFactor)
let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
let bytesPerRow = CGImageGetBytesPerRow(cgImage)
let colorSpace = CGImageGetColorSpace(cgImage)
let bitmapInfo = CGImageGetBitmapInfo(cgImage)
let context = CGBitmapContextCreate(nil, Int(width), Int(height), bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue)
CGContextSetInterpolationQuality(context, .High)
CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(width), height: CGFloat(height))), cgImage)
let scaledImage = CGBitmapContextCreateImage(context).flatMap { return UIImage(CGImage: $0) }
imageView.image = scaledImage
Это слишком легко, когда вы используете NSLayoutConstraint
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
view.addSubview(imageView)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 250).isActive = true
let heightLayout = imageView.heightAnchor.constraint(equalToConstant: 250)
heightLayout.isActive = true
imageView.image = UIImage(named: "SomeImage")
if let size = imageView.image?.size {
heightLayout.constant = size.height / size.width * 250 // 250 is imageView width
view.layoutIfNeeded()
}