簡體   English   中英

如何在Swift中以編程方式在圖像上添加漸變層?

[英]How can I programmatically add a Gradient Layer over an image in Swift?

我想在UIImage上放置一個預定義的透明到黑色漸變的圖層,其內容圖像通過網絡加載並在其上創建陰影效果。

我不想通過加載具有這種漸變的png來做到這一點。

我建議創建UIView的自定義子類(或UIImageView,如果要添加漸變的是UIImageView)。 在自定義視圖的init方法中,創建一個CAGradientLayer並將其添加為視圖圖層的子圖層。 然后在圖層上設置黑色到透明漸變。

您可能需要覆蓋layoutSubviews()並更改漸變圖層上的設置,以防視圖的邊界發生變化。

編輯:

在github上創建了一個游樂場,這是一個有用的例子:

代碼如下所示:

import UIKit
import AVFoundation


class ImageViewWithGradient: UIImageView
{
  let myGradientLayer: CAGradientLayer

  override init(frame: CGRect)
  {
    myGradientLayer = CAGradientLayer()
    super.init(frame: frame)
    self.setup()
  }

  required init(coder aDecoder: NSCoder)
  {
    myGradientLayer = CAGradientLayer()
    super.init(coder: aDecoder)
    self.setup()
  }

  func setup()
  {
    myGradientLayer.startPoint = CGPoint(x: 0, y: 0)
    myGradientLayer.endPoint = CGPoint(x: 1, y: 1)
    let colors: [CGColorRef] = [
      UIColor.clearColor().CGColor,
      UIColor(red: 0, green: 0, blue: 0, alpha: 0.3).CGColor,
      UIColor(red: 1, green: 1, blue: 1, alpha: 0.5).CGColor,
      UIColor(red: 0, green: 0, blue: 0, alpha: 0.3).CGColor,
      UIColor.clearColor().CGColor ]
    myGradientLayer.colors = colors
    myGradientLayer.opaque = false
    myGradientLayer.locations = [0.0,  0.3, 0.5, 0.7, 1.0]
    self.layer.addSublayer(myGradientLayer)
  }

  override func layoutSubviews()
  {
    myGradientLayer.frame = self.layer.bounds
  }
}


var aView = ImageViewWithGradient(frame: CGRect(x: 0, y: 0, width: 500, height: 500))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM