我有一个垂直大的长图像,如500pt x 1000pt。
我试图显示图像的底部。 所以,我想裁掉图像的顶部。
但是,contentMode = aspectToFil
裁剪图像的顶部和底部,并显示图像的中间位置。
下面有解释图片。
还有更好的方法吗?
注意:我无法使用contentMode = bottom
。因为图像非常大。
答案 0 :(得分:1)
您可以裁剪图片CGImage.cropping(to: CGRect)
。
将CGRect
的原点设置为要开始裁剪的位置的右上角,并将大小设置为所需裁剪的大小。然后从cgImage
初始化并成像。
let foo = UIImage(named: "fooImage")
guard let croppedCGImage = foo?.cgImage?.cropping(to: CGRect(x: 200, y: 200, width: 375, height: 400) else { return }
guard let croppedImage = UIImage(cgImage: croppedCGImage) else { return }
修改:使用@IBDesignable
和@IBInspectable
Video showing storyboard/nib usage
@IBDesignable
class UIImageViewCroppable: UIImageView {
@IBInspectable public var isCropped: Bool = false {
didSet { updateImage() }
}
@IBInspectable public var croppingRect: CGRect = .zero {
didSet { updateImage() }
}
func updateImage() {
guard isCropped else { return }
guard let croppedCGImage = image?.cgImage?.cropping(to: croppingRect) else { return }
image = UIImage(cgImage: croppedCGImage)
}
}
答案 1 :(得分:-1)
我找到了答案。
我希望解决xib文件中的问题;但我认为没有办法解决它。
imageView.contentMode = .bottom
if let anImage = image.cgImage {
imageView.image = UIImage(cgImage: anImage, scale: image.size.width / imageView.frame.size.width, orientation: .up)
}