带有aspectToFil的UIImageView并仅裁剪图像的顶部

时间:2018-05-31 08:18:33

标签: swift uiimageview uiimage swift4

我有一个垂直大的长图像,如500pt x 1000pt。

我试图显示图像的底部。 所以,我想裁掉图像的顶部。

但是,contentMode = aspectToFil裁剪图像的顶部和底部,并显示图像的中间位置。

下面有解释图片。

还有更好的方法吗?

注意:我无法使用contentMode = bottom。因为图像非常大。

aspectToFil

2 个答案:

答案 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 }

Apple Documentation

游乐场预览 enter image description here

修改:使用@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)
}