2016-12-30 47 views
2

在下图中,我有两种类型的投影。特殊投影: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拖放阴影匹配网页效果?

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

enter image description here

回答

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

像这样的东西应该工作:

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