我试图在swift中绘制几个形状(矩形,三角形,圆形,......),为此,我使用uibezierpath但我无法准确绘制我想要的内容。 我需要绘制一个矩形,但这个矩形的边框需要有不同的线宽。 为此,我创建了不同的路径,然后使用" appendpath"将它们合并在一条路径中。这样可行,但我还需要在这个矩形中有一个背景图像。 为此,我创建了一个图层并将其设置为图像。问题是,当我使用" appendpath"时,没有显示背景图像,当然因为它没有将我的绘图识别为矩形。
我希望它足够清楚,但有没有办法用背景图像绘制一个形状,并有不同的边框宽度?
感谢您的帮助!!
答案 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
您可能最初会发现这种方法更容易,但控制图像填充形状的方式并非易事。
我希望这会有所帮助 如果您想了解更多详情,请提供您要实现的目标和/或您目前编写的代码的图像或草图。谢谢!