美文网首页
iOS开发 给View添加指定位置的边框线

iOS开发 给View添加指定位置的边框线

作者: Damen_9527 | 来源:发表于2017-11-29 14:50 被阅读0次

    封装一:直接封装成了一个方法

    /// 边框类型(位移枚举)  
    typedef NS_ENUM(NSInteger, UIBorderSideType) {  
        UIBorderSideTypeAll    = 0,  
        UIBorderSideTypeTop    = 1 << 0,  
        UIBorderSideTypeBottom = 1 << 1,  
        UIBorderSideTypeLeft   = 1 << 2,  
        UIBorderSideTypeRight  = 1 << 3,  
    };  
      
    /** 
     设置view指定位置的边框 
     
     @param originalView   原view 
     @param color          边框颜色 
     @param borderWidth    边框宽度 
     @param borderType     边框类型 例子: UIBorderSideTypeTop|UIBorderSideTypeBottom 
     @return  view 
     */  
    - (UIView *)borderForView:(UIView *)originalView color:(UIColor *)color borderWidth:(CGFloat)borderWidth borderType:(UIBorderSideType)borderType {  
          
        if (borderType == UIBorderSideTypeAll) {  
            originalView.layer.borderWidth = borderWidth;  
            originalView.layer.borderColor = color.CGColor;  
            return originalView;  
        }  
          
        /// 线的路径  
        UIBezierPath * bezierPath = [UIBezierPath bezierPath];  
          
        /// 左侧  
        if (borderType & UIBorderSideTypeLeft) {  
            /// 左侧线路径  
            [bezierPath moveToPoint:CGPointMake(0.0f, originalView.frame.size.height)];  
            [bezierPath addLineToPoint:CGPointMake(0.0f, 0.0f)];  
        }  
          
        /// 右侧  
        if (borderType & UIBorderSideTypeRight) {  
            /// 右侧线路径  
            [bezierPath moveToPoint:CGPointMake(originalView.frame.size.width, 0.0f)];  
            [bezierPath addLineToPoint:CGPointMake( originalView.frame.size.width, originalView.frame.size.height)];  
        }  
          
        /// top  
        if (borderType & UIBorderSideTypeTop) {  
            /// top线路径  
            [bezierPath moveToPoint:CGPointMake(0.0f, 0.0f)];  
            [bezierPath addLineToPoint:CGPointMake(originalView.frame.size.width, 0.0f)];  
        }  
          
        /// bottom  
        if (borderType & UIBorderSideTypeBottom) {  
            /// bottom线路径  
            [bezierPath moveToPoint:CGPointMake(0.0f, originalView.frame.size.height)];  
            [bezierPath addLineToPoint:CGPointMake( originalView.frame.size.width, originalView.frame.size.height)];  
        }  
        
        CAShapeLayer * shapeLayer = [CAShapeLayer layer];  
        shapeLayer.strokeColor = color.CGColor;  
        shapeLayer.fillColor  = [UIColor clearColor].CGColor;  
        /// 添加路径  
        shapeLayer.path = bezierPath.CGPath;  
        /// 线宽度  
        shapeLayer.lineWidth = borderWidth;  
          
        [originalView.layer addSublayer:shapeLayer];  
          
        return originalView;  
    }  
    

    封装二:封装成了类别.h内容

    #import <UIKit/UIKit.h>  
      
    typedef NS_OPTIONS(NSUInteger, UIBorderSideType) {  
        UIBorderSideTypeAll  = 0,  
        UIBorderSideTypeTop = 1 << 0,  
        UIBorderSideTypeBottom = 1 << 1,  
        UIBorderSideTypeLeft = 1 << 2,  
        UIBorderSideTypeRight = 1 << 3,  
    };  
      
    @interface UIView (BorderLine)  
      
    - (UIView *)borderForColor:(UIColor *)color borderWidth:(CGFloat)borderWidth borderType:(UIBorderSideType)borderType;  
      
    @end 
    

    .m内容

    #import "UIView+BorderLine.h"  
      
    @implementation UIView (BorderLine)  
      
    - (UIView *)borderForColor:(UIColor *)color borderWidth:(CGFloat)borderWidth borderType:(UIBorderSideType)borderType {  
          
        if (borderType == UIBorderSideTypeAll) {  
            self.layer.borderWidth = borderWidth;  
            self.layer.borderColor = color.CGColor;  
            return self;  
        }  
          
          
        /// 左侧  
        if (borderType & UIBorderSideTypeLeft) {  
            /// 左侧线路径  
            [self.layer addSublayer:[self addLineOriginPoint:CGPointMake(0.f, 0.f) toPoint:CGPointMake(0.0f, self.frame.size.height) color:color borderWidth:borderWidth]];  
        }  
          
        /// 右侧  
        if (borderType & UIBorderSideTypeRight) {  
            /// 右侧线路径  
            [self.layer addSublayer:[self addLineOriginPoint:CGPointMake(self.frame.size.width, 0.0f) toPoint:CGPointMake( self.frame.size.width, self.frame.size.height) color:color borderWidth:borderWidth]];  
        }  
          
        /// top  
        if (borderType & UIBorderSideTypeTop) {  
            /// top线路径  
            [self.layer addSublayer:[self addLineOriginPoint:CGPointMake(0.0f, 0.0f) toPoint:CGPointMake(self.frame.size.width, 0.0f) color:color borderWidth:borderWidth]];  
        }  
          
        /// bottom  
        if (borderType & UIBorderSideTypeBottom) {  
            /// bottom线路径  
            [self.layer addSublayer:[self addLineOriginPoint:CGPointMake(0.0f, self.frame.size.height) toPoint:CGPointMake( self.frame.size.width, self.frame.size.height) color:color borderWidth:borderWidth]];  
        }  
          
        return self;  
    }  
      
    - (CAShapeLayer *)addLineOriginPoint:(CGPoint)p0 toPoint:(CGPoint)p1 color:(UIColor *)color borderWidth:(CGFloat)borderWidth {  
      
        /// 线的路径  
        UIBezierPath * bezierPath = [UIBezierPath bezierPath];  
        [bezierPath moveToPoint:p0];  
        [bezierPath addLineToPoint:p1];  
          
        CAShapeLayer * shapeLayer = [CAShapeLayer layer];  
        shapeLayer.strokeColor = color.CGColor;  
        shapeLayer.fillColor  = [UIColor clearColor].CGColor;  
        /// 添加路径  
        shapeLayer.path = bezierPath.CGPath;  
        /// 线宽度  
        shapeLayer.lineWidth = borderWidth;  
        return shapeLayer;  
    }   
    @end  
    

    用法:

    UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(80.0f, 80.0f, 200.0f, 100.0f)];  
        testView.backgroundColor = [UIColor lightGrayColor];  
        [self.view addSubview:testView];  
        [self borderForView:testView color:[UIColor redColor] borderWidth:1.0f borderType:UIBorderSideTypeTop | UIBorderSideTypeBottom];  
    

    效果:

    image

    不足之处,边框线过宽的话,交界处会有留白;

    ps:注意,需要先把你的view加载在父view上,[self.view addSubview:testView]; 之后再设置边框;否则可能会不起作用的;

    转载:http://blog.csdn.net/syg90178aw/article/details/72465473

    相关文章

      网友评论

          本文标题: iOS开发 给View添加指定位置的边框线

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