有時(shí)候,UI并不會(huì)給我們切帶有陰影的圖片身弊,陰影就需要我們自己來(lái)做娃弓。(當(dāng)然了典格,有圖片是最好的)
舉個(gè)栗子如圖:
我們要給上圖設(shè)置一個(gè)左側(cè)的陰影,系統(tǒng)的方法
shadowOffset
可以滿足台丛,但是系統(tǒng)的方法只能設(shè)置單側(cè)的陰影耍缴,我們需要多個(gè)方向變不可用。仔細(xì)觀察齐佳,系統(tǒng)的陰影有個(gè)過(guò)渡的效果私恬。所以我大膽猜測(cè),如果自己實(shí)現(xiàn)左側(cè)陰影的效果炼吴,實(shí)際上和上圖陰影的區(qū)域是類似的本鸣。(這些在下面處理陰影的寬度有很大的關(guān)系)
通過(guò)shadowPath 實(shí)現(xiàn)局部陰影 ,因?yàn)橄到y(tǒng)的過(guò)渡效果硅蹦,所以這個(gè)偏移為shadowPathWidth/2
self.layer.masksToBounds = NO;
self.layer.shadowColor = shadowColor.CGColor;
self.layer.shadowOpacity = shadowOpacity;
self.layer.shadowRadius = shadowRadius;
self.layer.shadowOffset = CGSizeZero;
因?yàn)橄到y(tǒng)的過(guò)渡效果荣德,所以這個(gè)偏移為shadowPathWidth/2
CGRect shadowRect = CGRectMake(originX, originY - shadowPathWidth/2, originW, shadowPathWidth);
UIBezierPath *path =[UIBezierPath bezierPathWithRect:shadowRect];
self.layer.shadowPath = path.CGPath;
將常用的局部陰影效果封裝為分類。
#import <UIKit/UIKit.h>
typedef enum :NSInteger{
LXShadowPathLeft,
LXShadowPathRight,
LXShadowPathTop,
LXShadowPathBottom,
LXShadowPathNoTop,
LXShadowPathAllSide
} LXShadowPathSide;
@interface UIView (LXShadowPath)
/*
* shadowColor 陰影顏色
*
* shadowOpacity 陰影透明度童芹,默認(rèn)0
*
* shadowRadius 陰影半徑涮瞻,默認(rèn)3
*
* shadowPathSide 設(shè)置哪一側(cè)的陰影,
* shadowPathWidth 陰影的寬度假褪,
*/
-(void)LX_SetShadowPathWith:(UIColor *)shadowColor shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius shadowSide:(LXShadowPathSide)shadowPathSide shadowPathWidth:(CGFloat)shadowPathWidth;
效果圖:demo地址:UIView局部陰影