具有多个线宽和背景图像的uibezierpath(swift)

时间:2016-06-20 08:36:40

标签: swift drawing layer uibezierpath

我试图在swift中绘制几个形状(矩形,三角形,圆形,......),为此,我使用uibezierpath但我无法准确绘制我想要的内容。 我需要绘制一个矩形,但这个矩形的边框需要有不同的线宽。 为此,我创建了不同的路径,然后使用" appendpath"将它们合并在一条路径中。这样可行,但我还需要在这个矩形中有一个背景图像。 为此,我创建了一个图层并将其设置为图像。问题是,当我使用" appendpath"时,没有显示背景图像,当然因为它没有将我的绘图识别为矩形。

我希望它足够清楚,但有没有办法用背景图像绘制一个形状,并有不同的边框宽度?

感谢您的帮助!!

1 个答案:

答案 0 :(得分:2)

我建议您尝试两种解决方案:

1)屏蔽

创建普通CALayer并将图片设置为contents。然后使用您喜欢的路径创建CAShapeLayer,并将其用作第一层的mask

E.g:

let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "yourImage")?.CGImage // Your image here
imageLayer.frame = ... // Define a frame

let maskPath = UIBezierPath(...) // Create your path here
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.CGPath

imageLayer.mask = maskLayer

不要忘记设置正确的框架和路径,你应该能够达到你想要的效果。

2)填充颜色

使用您喜欢的路径创建CAShapeLayer,然后将您的图片用作fillColor

E.g:

let path = UIBezierPath(...) // Create your path here
let layer = CAShapeLayer()
layer.path = path.CGPath

let image = UIImage(named: "yourImage") // Your image here
layer.fillColor = UIColor(patternImage: image!).CGColor

您可能最初会发现这种方法更容易,但控制图像填充形状的方式并非易事。

我希望这会有所帮助 如果您想了解更多详情,请提供您要实现的目标和/或您目前编写的代码的图像或草图。谢谢!