对于CGPattern的使用有很多很好的文章。在这里我给大家有一篇官方的文档,介绍的很详细,现在用Swift 4.2版本来实现。
let pattern = CGPattern(info: nil, bounds: bounds, matrix: CGAffineTransform.identity, xStep: 40, yStep: 40, tiling: CGPatternTiling.constantSpacingMinimalDistortion, isColored: true, callbacks: &callBacks);
let context = UIGraphicsGetCurrentContext();
context?.addRect(bounds);
let paterColor = CGColorSpace(patternBaseSpace: CGColorSpace(name: CGColorSpace.sRGB)!);
context?.setFillColorSpace(paterColor!);
var alph: CGFloat = 1;
context?.setFillPattern(pattern!, colorComponents: &alph);
context?.fillPath();
首先创建一个 CGPattern,第一个参数传nil,第二个参数是需要铺的大小,第三个是矩阵,第四个是瓦片的横间距,第5个参数是竖间距,第六格式平铺的模式,第7个是是否指定颜色,最后一个是回调。
quartz 提供三种选项,在必要的时候来调整pattern。
- pattern 通过调整pattern cell之间的间距为代价来适配pattern。这种无失真。NoDistortion
- cell之间以稍微扭曲模式来适配pattern。这种模式恒定间距的最小失真。ConstantSpacingMinimalDistortion
- cell之间的间距以牺牲pattern cell的扭曲成都来获取快速平铺。这被称为恒定间距。ConstantSpacing
下面是回调:
var callBacks = CGPatternCallbacks(version: 1, drawPattern: { (pointer, context) in
context.addRect(.init(x: 0, y: 0, width: 20, height: 20));
let cgColor = UIColor.red.cgColor;
context.setStrokeColor(cgColor);
context.strokePath();
}) { (pointer) in
print("释放资源");
};
这个是回到函数。
运行效果如下图:
只是边框的模式,也可以用填充模式,照葫芦画瓢,自己动手改改了,或者我们可以交流一下。