2012-05-16 33 views
3

我想添加一些陰影我的意見之一,我想實現的是隻在一邊繪製陰影,並讓他們有鋒利的邊緣。不,我沒有任何運氣嘗試了很多方法(使用視圖的CALayer + UIBezierPaths的陰影相關屬性)。不過,使用iOS總是渲染陰影帶柔邊是這樣的:iOS:下降陰影與銳利

enter image description here

但我真正想acchieve是這樣的(沒有圓角和銳邊對邊除了一個):

enter image description here

是否有任何優雅的方式來做到這一點,否則我將不得不得出使用CoreGraphics中自己的影子?

PS:我忘了提,我的觀點實際上應該是一個自定義的UIButton,因此壓倒一切的drawRect:會在這裏痛苦

+0

嘿YllierDev,請您解釋一下你最終的代碼塊是怎樣實現上述效果的?我正試圖學習如何在我的按鈕上應用陰影,並在右側顯示陰影。如果你能幫助我,那會很棒!在此先感謝 – Pavan

回答

4

我已經經歷了一個面具從視圖中刪除的影子......所以也許你可以嘗試一下。

CALayer *mask = [[[CALayer alloc] init] autorelease]; 
    mask.backgroundColor = [UIColor blackColor].CGColor; 
    mask.frame = CGRectMake(0.0, 0.0, yellowView.bounds.size.width + shadowWidth, yellowView.bounds.size.height); 
    yellowView.layer.mask = mask; 
+0

這聽起來像一個很好的建議。爲什麼我沒有想到...(facepalm) – YllierDev

+0

謝謝馬特,使用面具是正確的選擇。我真的不知道爲什麼我不這麼認爲:D – YllierDev

2

我想你想成爲什麼改變是shadowRadius值 - 設置爲零,你應該得到的鋒利邊緣,你正在尋找:

myView.layer.shadowRadius = 0; 
+0

感謝您的建議,但是將shadowRadius設置爲0會導致所有邊緣都很銳利,但是我希望邊緣除外。 – YllierDev

+0

對不起,錯過了這部分問題。你有沒有嘗試過使用像這樣yellowView.layer.shadowPath = CGRectMake(yellowView.bounds.size.width,0,1,yellowView.bounds.size.height);?這可能會讓你的一部分,但模糊,模糊可能會超越視圖的界限。 –

+0

如果你不能覆蓋drawRect,那麼你可能將不得不使用子視圖來實現這一點,所以父視圖是clipsToBounds = YES,並且你有一個黃色補丁的子視圖,它的寬度是讓我們說距離右邊緣10個像素,然後將你的影子放在黃色的補丁上。如果你認爲這可能對你有用,我會寫出更完整的答案。 –