画像の幅を画像の縦横比に保つように、画像のサイズを変更する必要があります。その後、画像ビューのコンテンツモードを.top
に設定し、その範囲へのクリッピングを有効にします。
resizeImage
は、this answerの改訂版です。
func setImageView() {
imageView.contentMode = .top
imageView.clipsToBounds = true
let image = UIImage(named: "portrait")
imageView.image = resizeImage(image, newWidth: imageView.frame.width)
}
func resizeImage(_ image: UIImage?, newWidth: CGFloat) -> UIImage? {
guard let image = image else {
return nil
}
let scale = newWidth/image.size.width
let newHeight = image.size.height * scale
let newSize = CGSize(width: newWidth, height: newHeight)
UIGraphicsBeginImageContext(newSize)
image.draw(in: CGRect(origin: .zero, size: newSize))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
は 'マージ' を定義します。 –
ImageViewで両方のコンテンツモードを使いたいということです。出来ますか? –
@ V-Dev。画像の上端または中央の切り抜きのみを達成したいのですか? –