正常的單陰影通過shadowColor設(shè)置即可,但是項(xiàng)目要做新擬態(tài)風(fēng)格,大概就是三四個(gè)外陰影,加兩三個(gè)內(nèi)陰影。。。很蛋疼,最開始用圖片做,但是圖片帶了陰影后拉伸會(huì)導(dǎo)致位置無法確認(rèn),并且拉伸后的陰影看上去很難看,最終走上了拿代碼實(shí)現(xiàn)的道路。
實(shí)現(xiàn)的邏輯是三層view,底層容器view+(外陰影view+內(nèi)陰影view),目前存在的問題是如果圓角不一致的無法使用,會(huì)把外陰影切掉,如果后續(xù)有了辦法會(huì)更新,如果有大神大佬有相關(guān)的知識(shí)歡迎分享。非常感謝。
先說外陰影的實(shí)現(xiàn):
首先是,外陰影本身有一種通過UIBezierPath實(shí)現(xiàn)的方法,之后發(fā)現(xiàn)通過UIBezierPath實(shí)現(xiàn)是一個(gè)大于view的視圖在view底部,形成的陰影,并且是layer,那么我通過sublayer是否可以實(shí)現(xiàn)添加多個(gè)sublayer來實(shí)現(xiàn)。

因?yàn)樾枰m配,所有在layoutSubviews中調(diào)用


效果如上,看著很奇怪,因?yàn)檫@個(gè)是外陰影的單個(gè)view效果,現(xiàn)在我們需要上面加一層view,這樣陰影效果就出來了,但是如果我直接吧view加在這個(gè)陰影view上面會(huì)發(fā)現(xiàn)沒有效果,因?yàn)楸籹ublayer遮蓋了,所以需要在陰影view的同位置加在陰影view的superview上。這也是為什么要用三層view實(shí)現(xiàn)的原因。

加上個(gè)白色view在上面后的效果,現(xiàn)在看起來有點(diǎn)那么回事了。之后來研究內(nèi)陰影,找到了一片關(guān)于內(nèi)陰影的文章,實(shí)現(xiàn)了內(nèi)陰影的效果?
http://www.itdecent.cn/p/b4d1a0b6439a,大佬是swift寫的,我轉(zhuǎn)成了oc的。
通過drawRect繪制內(nèi)陰影,主要的邏輯是畫一層內(nèi)陰影之后再把中間摳出來繪制一層底色。(我理解的是這樣的)

在drawRect中調(diào)用該方法繪制內(nèi)陰影,效果如下

內(nèi)外陰影整體效果

大概就是這么個(gè)情況,關(guān)于性能上的問題我也一直在考慮會(huì)不會(huì)很消耗性能,但是沒有看出來有什么問題,而且目前也只有這種實(shí)現(xiàn)方法。如果有大佬可以更好的修正其中的問題,非常感謝指教。關(guān)于內(nèi)外陰影的繪制肯定會(huì)有更精簡的方法,但是實(shí)在是能力有限,目前只能這樣。如果大佬有更好的實(shí)現(xiàn)辦法,包括可以多角不同角度的方法,代碼精簡,性能優(yōu)化歡迎指點(diǎn)。
下面把整體的代碼放置,可能有點(diǎn)亂,但是應(yīng)該不至于看不懂。
鏈接: https://pan.baidu.com/s/1Zq6TRoy4FaobGnTF1jVmXg?pwd=1234 提取碼: 1234 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦