簡體   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