Ios 将图像添加到bezierpath内的CAShapeLayer
我正在努力实施 在我的应用程序中,对于每个轮子切片,我试图将自定义图像添加到其shapelayer,或者在切片内部以任何其他可能的方式添加到其边界和路径,但我无法这样做。我尝试将图像添加到新shapelayer的内容中,并将其添加到我的饼图切片中,但也没有成功Ios 将图像添加到bezierpath内的CAShapeLayer,ios,swift,calayer,cashapelayer,Ios,Swift,Calayer,Cashapelayer,我正在努力实施 在我的应用程序中,对于每个轮子切片,我试图将自定义图像添加到其shapelayer,或者在切片内部以任何其他可能的方式添加到其边界和路径,但我无法这样做。我尝试将图像添加到新shapelayer的内容中,并将其添加到我的饼图切片中,但也没有成功 for wedgeNumber in 0..<numberOfWedges { let wedge: SpinWheelWedge = source.wedgeForSliceAtIndex(index: wedge
for wedgeNumber in 0..<numberOfWedges {
let wedge: SpinWheelWedge = source.wedgeForSliceAtIndex(index: wedgeNumber)
//Wedge shape
wedge.shape.configureWedgeShape(index: wedgeNumber, radius: radius, position: spinWheelCenter, degreesPerWedge: degreesPerWedge)
wedge.layer.addSublayer(wedge.shape)
let layer = CAShapeLayer()
layer.contents = UIImage(named: "sample.jpg")?.cgImage
layer.bounds = wedge.shape.bounds
layer.path = wedge.shape.path
wedge.shape.addSublayer(layer)
spinWheelView.addSubview(wedge)
}
0中的WedgeEnumber的。。
修改后的代码
for wedgeNumber in 0..<numberOfWedges {
let wedge: SpinWheelWedge = source.wedgeForSliceAtIndex(index: wedgeNumber)
//Wedge shape
wedge.shape.configureWedgeShape(index: wedgeNumber, radius: radius, position: spinWheelCenter, degreesPerWedge: degreesPerWedge)
wedge.layer.addSublayer(wedge.shape)
let imageLayer = CustomImageView()
imageLayer.image = UIImage(named: "sample.jpg")
imageLayer.bezierPath = wedge.shape.path
imageLayer.setNeedsLayout()
// Here you will get an image view with specified path
you can subview this imageLayer to the required view
}
用于0中的WedgeEnumber。简而言之,图像需要CALayer
,楔形路径需要CAShapeLayer
。使用形状层作为图像层的遮罩。我用所需的cgpath制作了一个遮罩层,遮罩了我的图像层(CALayer),然后将图像层作为子层添加到我的楔块(UIVIew)中。图像在切片中仍然不可见。请检查图像层上的边界。它与帧不同,可能将图像移动到可视区域之外。另外,在添加映像后设置断点,并检查Xcode中的调试器可以显示什么imageLayer@AshwinShrestha你能分享一下你的样本项目吗?这样我可以检查一下。谢谢,谢扎德。。。我可以通过使用与楔形形状相同的bezierpath形状遮罩图像视图来实现这一点。@AshwinShrestha您好。你能分享你的图像解决方案吗?
for wedgeNumber in 0..<numberOfWedges {
let wedge: SpinWheelWedge = source.wedgeForSliceAtIndex(index: wedgeNumber)
//Wedge shape
wedge.shape.configureWedgeShape(index: wedgeNumber, radius: radius, position: spinWheelCenter, degreesPerWedge: degreesPerWedge)
wedge.layer.addSublayer(wedge.shape)
let imageLayer = CustomImageView()
imageLayer.image = UIImage(named: "sample.jpg")
imageLayer.bezierPath = wedge.shape.path
imageLayer.setNeedsLayout()
// Here you will get an image view with specified path
you can subview this imageLayer to the required view
}