【问题标题】:How to apply UIEdgeInsets to CGImage?如何将 UIEdgeInsets 应用于 CGImage?
【发布时间】:2017-09-14 00:04:55
【问题描述】:

如何将UIEdgeInsets(或其一些变体)应用于CGImage?这是我最终想要实现的目标,但CGImage 在转换为CGImage 之前无法识别应用于UIImage 的底部插图。

var image = someUIImage
image = image.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: (image.size.height / 2), right: 0))
let imageCG: CGImage = image.cgImage!
layer.contents = imageCG


而且我不能直接将插图应用到CGImage(如此处所示)。

let image = someUIImage.cgImage!
image. // can't apply any inset here
layer.contents = image

解决方法?

【问题讨论】:

  • 你能让东西在UIView 或它的某个子类中正确显示吗?
  • 我可以,但不幸的是 CGImage 是这个特殊的委托方法所需要的(图像被用作地图上的注释),所以我几乎没有回旋余地。
  • 今天下午我实际上正在处理一些代码。我有代码可以将任何UIView 和它的子视图转换为UIImage,效果很好。现在我需要调整/裁剪/缩放该图像(实际上它是一个蒙版)以反映特定的大小。恕我直言,一旦您有了UIImge,将其更改为CGImage(或相反,这是我现在正在处理的)就是一行代码。你认为这对你有用吗? (1) 获取所有内容,包括插图,设置在视图中。 (2) 创建一个适当大小的视图的缩放图像。如果是这样,当我完成时(希望今天)我会发布完整的代码。

标签: ios swift cgimage


【解决方案1】:

您不能“将UIEdgeInsets”应用于CGImage,因为CGImage 没有alignmentRectInsets 属性。 UIImage 存储了 CGImage 没有的几个属性,包括 alignmentRectInsets

请注意,alignmentRectInsets 属性的存在会影响自动布局如何构成包含图像的UIImageViewUIImageView 从其UIImagealignmentRectInsets 中设置自己的alignmentRectInsets。然后自动布局在计算UIImageView 的框架时使用对齐矩形。

自动布局不适用于图层,因此CALayer 不需要alignmentRectInsets 属性。

换句话说,你所要求的并没有真正的意义。

如果你修改你的问题来解释你想要什么样的视觉效果,我也许可以就如何获得它提供建议。

【讨论】:

  • 很好解释 :) 我不知道 UIImageView 从 UIImage 获取 alignmentRectInsets !!!因此 +1。
  • 感谢您的深入回答,我发现它很有帮助。我想要的视觉效果只是将底部边距应用于CGImage。如果可以的话,我会使用标准的UIImage,但这张图片将是地图上的注释,其类型必须为CGImage
【解决方案2】:

试试这个方法:

让 resizable = img.resizableImage(withCapInsets: UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8), resizingMode: .stretch)

【讨论】:

  • 不幸的是,插图仍然没有延续到CGImage
猜你喜欢
  • 1970-01-01
  • 2021-02-25
  • 2020-07-03
  • 2016-01-06
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
相关资源
最近更新 更多