[注意:更新到 Swift 2.2 和 Swift 3]
快速回答:使用 CALayer
如CAShapeLayer 类参考中所述,aCAShapeLayer
用于使用自定义路径绘制形状。将图像设置为其contents
将被忽略。
如果您只想在图层中显示图像(假设您的文件名为image.png
),则可以使用 aCALayer
并设置其contents
属性,以便它引用CGImage
图像的表示:
斯威夫特 2.2:
let layer = CALayer()
layer.contents = UIImage(named: "image")?.CGImage
斯威夫特 3:
let layer = CALayer()
layer.contents = UIImage(named: "image")?.cgImage
更长的答案:继续使用 CAShapeLayer
由于 OP 专门询问了CAShapeLayer
,因此问题可能类似于“如何使用 将图像裁剪为特定形状CAShapeLayer
?”
我建议您尝试两种解决方案:
1) 掩蔽
创建一个法线CALayer
并将图像设置为其contents
. 然后用你喜欢的路径创建一个CAShapeLayer
并将其用作第一层的mask
.
斯威夫特 2.2:
let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "image")?.CGImage // Assign your image
imageLayer.frame = ... // Define a frame
let maskPath = UIBezierPath(...) // Create your path
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.CGPath
imageLayer.mask = maskLayer // Set the mask
斯威夫特 3:
let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "image")?.cgImage // Assign your image
imageLayer.frame = ... // Define a frame
let maskPath = UIBezierPath(...) // Create your path
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.cgPath
imageLayer.mask = maskLayer // Set the mask
不要忘记设置正确的框架和路径,应该可以达到你想要的效果。
2) 填充颜色
使用您喜欢的路径创建一个CAShapeLayer
,然后将您的图像用作它的fillColor
.
斯威夫特 2.2:
let path = UIBezierPath(...) // Create your path
let layer = CAShapeLayer()
layer.path = path.CGPath
let image = UIImage(named: "image") // Assign your image
layer.fillColor = UIColor(patternImage: image!).CGColor
斯威夫特 3:
let path = UIBezierPath(...) // Create your path
let layer = CAShapeLayer()
layer.path = path.cgPath
let image = UIImage(named: "image") // Assign your image
layer.fillColor = UIColor(patternImage: image!).cgColor
一开始您可能会发现这种方法更容易,但控制图像填充形状的方式并非易事。