2017-10-06 54 views
0

我要實現對UIViews和UIImageViews的這種效果:斯威夫特3把2種顏色以相同的UIView

UIImageView

UIView

在UIView的,我知道我可以把2它裏面有不同顏色,但我幾乎認爲必須有更好的方法,我不知道如何在UIImageVIew中做到這一點。某種形式的吊艙會非常有用,因爲我找不到它。

+1

您應該使用兩種顏色的圖像。它比試圖在圖像視圖中放置兩種顏色更相關。你爲什麼要放兩種顏色?改用圖像! – Lion

+0

要求教程或圖書館在這裏不是一個有效的主題。 –

+0

事情是我需要使它灰色時,它是「不活躍」,我不能應用正常的色調因爲灰色將在2種顏色 –

回答

1

您可以添加一個漸變圖層,而不是從一種顏色轉換到另一種顏色,而是從顏色轉到相同的顏色直到中間點,並且與後一半相同。檢查例子:

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之前調用一次或刪除子層。所以當然有改進的餘地。