用两种不同的颜色给图像着色
Posted
技术标签:
【中文标题】用两种不同的颜色给图像着色【英文标题】:Tint image with two different colors 【发布时间】:2017-10-05 08:34:01 【问题描述】:我有一个有两种颜色的图像:中心用红色填充的圆圈和周围的白色环。
有没有办法用两种不同的颜色为该图像着色?例如:用绿色填充内圈,用蓝色填充外圈。
是否可以只改变外圈的颜色?
为图像着色:
let image = UIImage(named: "circles")?.tintWithColor(UIColor.red)
总是改变两个圆圈的颜色。
【问题讨论】:
你能显示你在问题中描述的图像吗? 你不能对图像进行更改,所以使用 UIView。 为什么这被否决了? 【参考方案1】:您不能像这样对图像进行更改,所以请使用 UIView。
使用这个自定义类
import UIKit
@IBDesignable
class CircleView: UIView
@IBInspectable var strokeWidth: CGFloat = 0
@IBInspectable var outerFillColor: UIColor = UIColor.clear
@IBInspectable var innerFillColor: UIColor = UIColor.red
@IBInspectable var strokeColor: UIColor = UIColor.clear
@IBInspectable var innerWidth: CGFloat = 0
@IBInspectable var bgColor: UIColor = UIColor.white
didSet
backgroundColor = bgColor
override func draw(_ rect: CGRect)
self.backgroundColor = bgColor
let circlePath = UIBezierPath(ovalIn: rect)
let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.cgPath
shapeLayer.fillColor = outerFillColor.cgColor
shapeLayer.strokeColor = strokeColor.cgColor
shapeLayer.lineWidth = strokeWidth
self.layer.addSublayer(shapeLayer)
let iFrame = CGRect(x: self.frame.width/2 - innerWidth/2,
y: self.frame.height/2 - innerWidth/2,
width: innerWidth, height: innerWidth)
let innerCirclePath = UIBezierPath(ovalIn: iFrame)
let shapeLayerInner = CAShapeLayer()
shapeLayerInner.path = innerCirclePath.cgPath
shapeLayerInner.fillColor = innerFillColor.cgColor
self.layer.addSublayer(shapeLayerInner)
如何使用
-
从情节提要中获取 UIView 并分配类。
现在使用该属性
StrokeWidth:外圆宽度。
StrokeColor:外圈颜色。
outerFillColor:外圈填充颜色。
innerWidth :内圈宽度。
innerFillColor:内圈填充颜色。
bgcolor: uiview 的背景色,在storyboard 中已经有。这是额外的。
输出
现在从情节提要更改更改颜色并检查。属性会立即应用于情节提要,因此您无需运行项目。
【讨论】:
以上是关于用两种不同的颜色给图像着色的主要内容,如果未能解决你的问题,请参考以下文章