美文网首页
iOS UIView设置局部阴影

iOS UIView设置局部阴影

作者: 雪_晟 | 来源:发表于2017-11-23 15:46 被阅读5765次

    有时候,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 <UIKit/UIKit.h>
    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设置局部阴影

          本文链接:https://www.haomeiwen.com/subject/fzmzvxtx.html