斯威夫特3把2种颜色以相同的UIView

问题描述:

我要实现对UIViews和UIImageViews的这种效果:斯威夫特3把2种颜色以相同的UIView

UIImageView

UIView

在UIView的,我知道我可以把2它里面有不同颜色,但我几乎认为必须有更好的方法,我不知道如何在UIImageVIew中做到这一点。某种形式的吊舱会非常有用,因为我找不到它。

+1

您应该使用两种颜色的图像。它比试图在图像视图中放置两种颜色更相关。你为什么要放两种颜色?改用图像! – Lion

+0

要求教程或图书馆在这里不是一个有效的主题。 –

+0

事情是我需要使它灰色时,它是“不活跃”,我不能应用正常的色调因为灰色将在2种颜色 –

您可以添加一个渐变图层,而不是从一种颜色转换到另一种颜色,而是从颜色转到相同的颜色直到中间点,并且与后一半相同。检查例子:

let twoColorView = UIView(frame: CGRect(x: 40, y: 100, width: 200, height: 100)) 
let gradientLayer = CAGradientLayer() 
gradientLayer.frame = twoColorView.bounds 
gradientLayer.colors = [UIColor.red.cgColor, UIColor.red.cgColor, UIColor.blue.cgColor, UIColor.blue.cgColor] 
gradientLayer.locations = [NSNumber(value: 0.0), NSNumber(value: 0.5), NSNumber(value: 0.5), NSNumber(value: 1.0)] 
twoColorView.layer.addSublayer(gradientLayer) 

,当然你可以风格,进一步查看,如:

twoColorView.layer.cornerRadius = twoColorView.bounds.height/2 
twoColorView.layer.masksToBounds = true 

它导致这样的:

enter image description here

编辑

它可以概括d接受任意数量的颜色。创建一个UIView扩展并在那里添加你的逻辑。以这种方式,颜色可以被应用到任何UIView及其子类,如的UILabel,的UIButton,的UIImageView等

extension UIView { 
    func addColors(colors: [UIColor]) { 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = self.bounds 

     var colorsArray: [CGColor] = [] 
     var locationsArray: [NSNumber] = [] 
     for (index, color) in colors.enumerated() { 
      // append same color twice 
      colorsArray.append(color.cgColor) 
      colorsArray.append(color.cgColor) 
      locationsArray.append(NSNumber(value: (1.0/Double(colors.count)) * Double(index))) 
      locationsArray.append(NSNumber(value: (1.0/Double(colors.count)) * Double(index + 1))) 
     } 

     gradientLayer.colors = colorsArray 
     gradientLayer.locations = locationsArray 

     self.backgroundColor = .clear 
     self.layer.addSublayer(gradientLayer) 

     // This can be done outside of this funciton 
     self.layer.cornerRadius = self.bounds.height/2 
     self.layer.masksToBounds = true 
    } 
} 

和添加的颜色:

let colorView = UIImageView(frame: CGRect(x: 40, y: 100, width: 200, height: 100)) 
    colorView.addColors(colors: [.red, .green, .blue]) 
    view.addSubview(colorView) 

这是结果:

enter image description here

请注意不要在视图的生命周期中多次调用此函数,因为它会添加子图层rs在彼此之上。因此,请在再次致电addColors之前调用一次或删除子层。所以当然有改进的余地。