我想在视图中添加多个具有不同不透明度的阴影.阴影的规格如下:
模糊半径为1的Y偏移为4
模糊半径为10的Y偏移量为10
Y偏移为2,模糊半径为4
模糊半径为1,展开为1(无偏移,可能必须是4个不同的阴影)
我可以用CALayer
s 来完成所有这些工作.这是我为此工作的代码(请注意我还没有打扰设置shadowPath
,直到我得到多个阴影的东西才会工作):
layer.cornerRadius = 4 layer.masksToBounds = false layer.shouldRasterize = true let layer2 = CALayer(layer: layer), layer3 = CALayer(layer: layer), layer4 = CALayer(layer: layer) layer.shadowOffset = CGSizeMake(0, 4) layer.shadowRadius = 1 layer2.shadowOffset = CGSizeMake(0, 10) layer2.shadowRadius = 10 layer2.shadowColor = UIColor.blackColor().CGColor layer2.shouldRasterize = true //Evidently not copied during initialization from self.layer layer3.shadowOffset = CGSizeMake(0, 2) layer3.shadowRadius = 4 layer3.shouldRasterize = true layer4.shadowOffset = CGSizeMake(0, 1) layer4.shadowRadius = 1 layer4.shadowOpacity = 0.1 layer4.shouldRasterize = true layer.addSublayer(layer2) layer.addSublayer(layer3) layer.addSublayer(layer4)
(虽然这段代码在Swift中,但我相信它对于大多数Cocoa/Objective-C开发人员而言看起来很熟悉,因为它才有意义.只知道在这种情况下它就layer
等同了self.layer
.)
然而,当我尝试对每个阴影使用不同的不透明度时,会出现问题.该shadowOpacity
属性layer
最终应用于其所有子层.这是一个问题,因为我需要他们所有人拥有自己的阴影不透明度.我已经尝试每一层的影子的不透明度设置为它的正确值(0.04
,0.12
等),但随后的不透明度0.04
的layer
适用于所有子层.于是,我就设置layer.shadowOpacity
到1.0
,但这种把所有的阴影纯黑色.我也试着做layer2.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.12).CGColor
得很聪明,但它只是变成了全黑而没有透明度.
我认为它的某种意义是层应该都具有相同的阴影不透明度.但是有什么方法可以让这种工作,不同的不透明度和所有(CALayer
如果更容易以另一种方式使用,则不必使用)?
请不要回答"只是使用图像":无论多么理智,我都试图避免它.只是幽默我
谢谢.
编辑:根据要求,这是我追求的: .