单视图iOS上的多个投影阴影

 醒目365_135 发布于 2022-12-28 17:35

我想在视图中添加多个具有不同不透明度的阴影.阴影的规格如下:

模糊半径为1的Y偏移为4

模糊半径为10的Y偏移量为10

Y偏移为2,模糊半径为4

模糊半径为1,展开为1(无偏移,可能必须是4个不同的阴影)

我可以用CALayers 来完成所有这些工作.这是我为此工作的代码(请注意我还没有打扰设置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.04layer适用于所有子层.于是,我就设置layer.shadowOpacity1.0,但这种把所有的阴影纯黑色.我也试着做layer2.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.12).CGColor得很聪明,但它只是变成了全黑而没有透明度.

我认为它的某种意义是层应该都具有相同的阴影不透明度.但是有什么方法可以让这种工作,不同的不透明度和所有(CALayer如果更容易以另一种方式使用,则不必使用)?

请不要回答"只是使用图像":无论多么理智,我都试图避免它.只是幽默我

谢谢.

编辑:根据要求,这是我追求的: 目标.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有