特殊投影:Swift 2

时间:2016-12-30 00:08:32

标签: ios swift swift2 png

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

在swift中,我使用过这个功能:

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阴影与网络效果相匹配?

我使用.png文件,但如果我必须转换文件格式,那就不会有太多工作。

enter image description here

2 个答案:

答案 0 :(得分:2)

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

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

view.layer.shadowOpacity 会改变阴影的黑暗。它的值从0变为1.

假设我们将 shadowOffset设置为CGSizeMake(5,0)并将 shadowRadius设置为小于5 ,则阴影将移动到对象的右侧,在其他方面不会有任何阴影。假设值为 CGSizeMake(0,5),阴影将位于对象的底部,即它将向下移动5个点并且在其他边不会有任何阴影。因此,如果值 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
}

答案 1 :(得分:1)

这样的事情应该有效:

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。这些是可以互换的,如果你设置一个,另一个应该自动更新。