用另一个 CALayer 屏蔽 CALayer
Mask CALayer with Another CALayer
我正在尝试用另一层 (stickerMask) 的图像遮盖一个 CALayer(newSticker),如下所示:
func placeSticker(location: CGPoint) {
let stickerMask = CALayer()
stickerMask.contents = UIImage(contentsOfFile:NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent("brush\(self.stickerSelected).png"))!.CGImage
stickerMask.frame = CGRect(x: location.x * 100, y: location.y * 100, width: 200, height: 200)
let newSticker = CALayer()
newSticker.backgroundColor = UIColor(red: self.red, green: self.green, blue: self.blue, alpha: 1.0).CGColor
newSticker.frame =
CGRect(x: location.x * 100, y: location.y * 100, width: 200, height: 200)
newSticker.mask = stickerMask
self.picturesView.layer.addSublayer(newSticker)
}
如果我在我的 "picturesView" 图层中单独添加 stickerMask,它会正确加载到屏幕上,并且 newSticker 会加载相应的自定义背景颜色。
我的问题是,一旦将 stickerMask 应用到 newSticker.mask,什么也没有出现。我尝试将 masksToBounds 设置为 false 和 true,但得到的结果相同。
你知道我做错了什么吗?
问题出在掩码的帧计算上。
确保当某些层是蒙版时,您应该计算蒙版的框架,就像它只是超层的子层一样。
也就是说mask的坐标系就是superlayer的坐标系
我正在尝试用另一层 (stickerMask) 的图像遮盖一个 CALayer(newSticker),如下所示:
func placeSticker(location: CGPoint) {
let stickerMask = CALayer()
stickerMask.contents = UIImage(contentsOfFile:NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent("brush\(self.stickerSelected).png"))!.CGImage
stickerMask.frame = CGRect(x: location.x * 100, y: location.y * 100, width: 200, height: 200)
let newSticker = CALayer()
newSticker.backgroundColor = UIColor(red: self.red, green: self.green, blue: self.blue, alpha: 1.0).CGColor
newSticker.frame =
CGRect(x: location.x * 100, y: location.y * 100, width: 200, height: 200)
newSticker.mask = stickerMask
self.picturesView.layer.addSublayer(newSticker)
}
如果我在我的 "picturesView" 图层中单独添加 stickerMask,它会正确加载到屏幕上,并且 newSticker 会加载相应的自定义背景颜色。
我的问题是,一旦将 stickerMask 应用到 newSticker.mask,什么也没有出现。我尝试将 masksToBounds 设置为 false 和 true,但得到的结果相同。
你知道我做错了什么吗?
问题出在掩码的帧计算上。
确保当某些层是蒙版时,您应该计算蒙版的框架,就像它只是超层的子层一样。
也就是说mask的坐标系就是superlayer的坐标系