iOS UIView设置局部阴影

有时候,UI并不会给我们切带有阴影的图片,阴影就需要我们自己来做。(当然了,有图片是最好的)

举个栗子如图:

阴影.png

我们要给上图设置一个左侧的阴影,系统的方法shadowOffset可以满足,但是系统的方法只能设置单侧的阴影,我们需要多个方向变不可用。仔细观察,系统的阴影有个过渡的效果。所以我大胆猜测,如果自己实现左侧阴影的效果,实际上和上图阴影的区域是类似的。(这些在下面处理阴影的宽度有很大的关系)

通过shadowPath 实现局部阴影 ,因为系统的过渡效果,所以这个偏移为shadowPathWidth/2

    self.layer.masksToBounds = NO;
    
    self.layer.shadowColor = shadowColor.CGColor;
    
    self.layer.shadowOpacity = shadowOpacity;
    
    self.layer.shadowRadius =  shadowRadius;
    
    self.layer.shadowOffset = CGSizeZero;

   因为系统的过渡效果,所以这个偏移为shadowPathWidth/2
   CGRect shadowRect    = CGRectMake(originX, originY - shadowPathWidth/2, originW,  shadowPathWidth);

   UIBezierPath *path =[UIBezierPath bezierPathWithRect:shadowRect];
    
    self.layer.shadowPath = path.CGPath;

将常用的局部阴影效果封装为分类。

#import 
typedef enum :NSInteger{
    
    LXShadowPathLeft,
    
    LXShadowPathRight,
    
    LXShadowPathTop,

    LXShadowPathBottom,

    LXShadowPathNoTop,
    
    LXShadowPathAllSide

} LXShadowPathSide;
@interface UIView (LXShadowPath)

/*
 * shadowColor 阴影颜色
 *
 * shadowOpacity 阴影透明度,默认0
 *
 * shadowRadius  阴影半径,默认3
 *
 * shadowPathSide 设置哪一侧的阴影,
 
 * shadowPathWidth 阴影的宽度,

 */

-(void)LX_SetShadowPathWith:(UIColor *)shadowColor shadowOpacity:(CGFloat)shadowOpacity shadowRadius:(CGFloat)shadowRadius shadowSide:(LXShadowPathSide)shadowPathSide shadowPathWidth:(CGFloat)shadowPathWidth;

效果图:
局部阴影.gif

demo地址:UIView局部阴影

你可能感兴趣的:(iOS UIView设置局部阴影)