我想在UIImage上放置一个预定义 透明到黑色 渐变的图层,其内容图片是通过网络加载的 在它上面创造阴影的效果。
我不想通过加载具有这种渐变的png来实现。
答案 0 :(得分:12)
我建议创建UIView的自定义子类(或UIImageView,如果要添加渐变的是UIImageView)。在自定义视图的init方法中,创建一个CAGradientLayer并将其添加为视图图层的子图层。然后在图层上设置黑色到透明渐变。
您可能需要覆盖layoutSubviews()并更改渐变图层上的设置,以防视图边界发生变化。
编辑:
我创建了一个playground as a gist on 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))