繁体   English   中英

特殊投影:Swift 2

[英]Special drop shadow: Swift 2

在下图中,我有两种阴影。

快速地,我使用了以下功能:

func applyShadow(view: UIView){
    view.layer.shadowColor = UIColor.blackColor().CGColor
    view.layer.shadowOffset = CGSizeMake(0, 1)
    view.layer.shadowOpacity = 0.5
    view.layer.shadowRadius = 10.0
    view.clipsToBounds = false
    view.layer.masksToBounds = false
}

将阴影应用于图像视图中的图像。

如何修改applyShadow函数以使iOS阴影与Web的效果匹配?

我正在使用.png文件,但是如果我不得不转换文件格式,那就不会做太多的工作了。

在此处输入图片说明

在这里,只需将view.layer.shadowOffset视为二维坐标系的第四象限。 因此,如果该值为CGSizeMake(0,0) ,则阴影将平均分布在所有侧面。

现在view.layer.shadowRadius只是阴影的半径或范围。 通过更改其值,阴影长度将更改。

view.layer.shadowOpacity将更改阴影的暗度。 其值从0变为1。

假设我们将shadowOffset设置为CGSizeMake(5,0)并将shadowRadius设置为小于5的值 ,则阴影将移动到对象的右侧,而在其他侧面将没有任何阴影。 假设值为CGSizeMake(0,5) ,则阴影将在对象的底部,即,它将向下移动5个点,并且在另一侧没有任何阴影。 因此,如果value为CGSizeMake(5,5) ,则阴影将向左下方向移动5个点。

我认为您对此有了更好的了解。 因此,当您遇到问题时,我认为这可以解决问题:

func applyShadow(view: UIView){
    view.layer.shadowColor = UIColor.blackColor().CGColor
    view.layer.shadowOffset = CGSizeMake(8, 12)
    view.layer.shadowOpacity = 0.4
    view.layer.shadowRadius = 5.0
}

这样的事情应该起作用:

func applyShadow(view: UIView){
    let offset = CGSize(width: 150, height: 150)
    let path = UIBezierPath()
    path.move(to: CGPoint(x: 0, y: 0))
    path.addLine(to: CGPoint(x: view.frame.size.width, y: 0))
    path.addLine(to: CGPoint(x: view.frame.size.width + offset.width, y: view.frame.size.height))
    path.addLine(to: CGPoint(x: view.frame.size.width + offset.width, y: view.frame.size.height + offset.height))
    path.addLine(to: CGPoint(x: view.frame.size.width, y: view.frame.size.height + offset.height))
    path.addLine(to: CGPoint(x: 0, y: view.frame.size.height))
    path.addLine(to: CGPoint(x: 0, y: 0))

    view.layer.shadowColor = UIColor.black.cgColor
    view.layer.shadowPath = path.cgPath
    view.layer.shadowOpacity = 0.2
    view.layer.shadowRadius = 2.0
    view.layer.masksToBounds = false
}

您可能需要花更多的时间使用offsetshadowOpacityshadowRadius来获得尽可能接近的值,但是当我在本地调试时,这些值非常接近。

另外,您无需同时执行view.clipsToBoundsview.layer.masksToBounds 这些几乎可以互换,如果您设置了一个,则另一个应自动更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM