【问题标题】:Mask CALayer with Another CALayer用另一个 CALayer 遮罩 CALayer
【发布时间】:2015-06-16 23:31:30
【问题描述】:

我正在尝试用另一层(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,什么都不会出现。我尝试将 maskToBounds 设置为 false 和 true,但得到相同的结果。

对我做错了什么有任何想法吗?

【问题讨论】:

  • 可能问题出在面具的框架上。尝试使用 x = 0 和 y = 0 作为遮罩的框架,如果有效,那么您只需要精确计算遮罩的框架。
  • tikhop,就是这样!非常感谢。

标签: ios xcode swift calayer mask


【解决方案1】:

问题在于掩码的帧计算。

确保当某些层是遮罩时,您应该计算遮罩的框架,就像它只是超层的子层一样。

也就是说,mask的坐标系等于superlayer坐标系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2019-02-24
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多