通过CAGradientLayer将渐变层添加到IOS中的UIImageView

时间:2019-02-18 20:54:30

标签: ios swift uiimageview uilabel gradient

我正在尝试像在Android中一样在IOS中添加渐变。因此,我可以在UIImageView顶部看到我的标签,并且该标签未被隐藏。

enter image description here

在android中,我是在可绘制的`

中完成的
<gradient
    android:angle="90"
    android:endColor="#00ffffff"
    android:startColor="#aa000000"
    android:centerColor="#00ffffff" />

<corners android:radius="0dp" />

`

我试图在IOS Swift 4.2中执行此操作,并且得到以下信息:

    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
    gradient.locations = [0.0 , 1.0]
    gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
    gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
    gradient.frame = CGRect(x: 0.0, y: 0.0, width: showImageView.frame.size.width, height: showImageView.frame.size.height)
    showImageView.layer.addSublayer(gradient)

enter image description here

如何使渐变从底部开始呈黑色并向上呈90度上升?如何更改不透明度?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

一些想法:

  1. 选择alpha小于1的颜色。也许:

    gradient.colors = [
        UIColor.black.withAlphaComponent(0.8).cgColor,
        UIColor.black.withAlphaComponent(0).cgColor
    ]
    
  2. 要使此渐变垂直,请选择具有相同x值的起点和终点。例如。覆盖下半部分,也许:

    gradient.startPoint = CGPoint(x: 0.5, y: 1)
    gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
    
  3. 使用frame时要非常小心。您希望图层引用图像视图的bounds(使用图像视图的坐标系),而不引用frame(用于指定图像视图在其父视图的坐标系中的位置)。如果图像视图恰好位于0, 0,则可能看不到差异,但是如果完全移动图像视图,这些图像将开始偏离。因此,假设您要将此渐变添加到图像视图本身,则可以使用图像视图的边界:

    gradient.frame = showImageView.bounds
    

因此:

let gradient = CAGradientLayer()
gradient.colors = [
    UIColor.black.withAlphaComponent(0.8).cgColor,
    UIColor.black.withAlphaComponent(0.0).cgColor
]
gradient.startPoint = CGPoint(x: 0.5, y: 1)
gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
imageView.layer.addSublayer(gradient)
gradient.frame = showImageView.bounds