2016-12-30 49 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。這些可以互換,如果你設置一個,另一個應該自動更新。