Can a single CALayer be used as the mask for multiple other layers?

前端 未结 2 519
忘掉有多难
忘掉有多难 2021-01-12 11:58

I can\'t find anything in the docs that indicates whether a single CALayer (or subclass) can be used as the mask property for multiple other layers. Is it possi

相关标签:
2条回答
  • 2021-01-12 12:49

    It is possible. I combined mask of CAGradationLayer and CAShapeLayer.

    I made UIImage from two layers, and I use it to mask.

    You can generate image from CALayer like below.

    extension CALayer {
        func makeImage() -> UIImage {
            UIGraphicsBeginImageContext(self.frame.size)
            self.renderInContext(UIGraphicsGetCurrentContext())
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return image
        }
    }
    

    and You can mask by multiple layers.

    firstMask.mask = secondMask
    let img = firstMask.makeImage()// require firstMask.frame
    
    let combinedMask = CALayer()
    combinedMask.frame = CGRectMake(0,0, img.size.width, img.size.height)
    combinedMask.contents = img.CGImage
    
    yourLayer.mask = combinedMask
    
    0 讨论(0)
  • 2021-01-12 13:01

    My experimentation says that it cannot. It will end up as the mask for the last layer it is attached to, and any previous layers it was assigned as a mask to, will revert to the default value of mask.

    0 讨论(0)
提交回复
热议问题