swift - UIImageView 与aspectToFil 并仅裁剪图像的顶部

标签 swift uiimageview uiimage swift4

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

我正在尝试显示图像的最底部。 所以,我想剪掉图像的顶部。

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

下面有说明图片。

还有什么更好的办法吗?

注意:我无法使用contentMode = Bottom。因为图片太大了。

aspectToFil

最佳答案

您可以裁剪图像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

Playground 预览 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)
    }
}

关于swift - UIImageView 与aspectToFil 并仅裁剪图像的顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50619748/

相关文章:

ios - 我如何将数据传递给 swift4 中的变量?

ios - 按钮操作和点击手势在 UIView XIB 上不起作用

iphone - 向 UIImageView 添加反射的最有效方法是什么

ios - UIImage 不保存到磁盘

ios - 通过 preparesegue 将图像从一个 View 传递到另一个 View ?

ios - RTL 图像不会在 UITableViewCell 中翻转

swift - SKView 背景图像不显示 = 黑色

ios - 无法在prepareForSegue中的目标 View 中设置变量

ios - 在 iOS 导航 Controller 的代码中自定义图像大小

ios - UIImageView 溢出到 Collection View 单元格之外