oc和swift UIView类扩展画虚线外边框(含代码)

54 篇文章 1 订阅
18 篇文章 0 订阅


封装了oc和 swift的 2个UIView的虚线外框的类扩展,可以设置线的长度,间隙长度,虚线宽度,虚线颜色,外框圆角边框,一行代码调用非常方便

oc类扩展

//
//  UIView+Extension.h
//  画虚线
//
//  Created by tdw on 2020/12/2.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIView (Extension)
/**
 画外框虚线
 
 @param width 虚线宽度
 @param lenth 一段虚线的长度
 @param space 虚线间距
 @param cornerRadius 边框圆角

 */
-(void) drawBoardDottedLine:(double)width lenth:(double)lenth space:(double)space cornerRadius:(double)cornerRadius color:(UIColor*)color;
@end

NS_ASSUME_NONNULL_END
@end



//
//  UIView+Extension.m
//  画虚线
//
//  Created by tdw on 2020/12/2.
//

#import "UIView+Extension.h"

@implementation UIView (Extension)
-(void) drawBoardDottedLine:(double)width lenth:(double)lenth space:(double)space cornerRadius:(double)cornerRadius color:(UIColor*)color
{
    self.layer.cornerRadius = cornerRadius;
    
    CAShapeLayer *borderLayer = [CAShapeLayer layer];
    
    borderLayer.bounds = self.bounds;
    borderLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
    borderLayer.path = [UIBezierPath bezierPathWithRoundedRect:borderLayer.bounds cornerRadius:cornerRadius].CGPath;
    borderLayer.lineWidth = width / [[UIScreen mainScreen] scale];
    //虚线边框---小边框的长度
    borderLayer.lineDashPattern = @[@(lenth), @(space)];//前边是虚线的长度,后边是虚线之间空隙的长度
    borderLayer.lineDashPhase = 0.1;
    //实线边框
    borderLayer.fillColor = [UIColor clearColor].CGColor;
    borderLayer.strokeColor = color.CGColor;
    [ self . layer addSublayer :borderLayer];
}
@end

swift使用使用的时候要在桥接文件里添加:

//画虚线-Bridging-Header.h
#import "UIView+Extension.h"

swift类扩展

//
//  UIView+Extension.swift
//  画虚线
//
//  Created by tdw on 2020/12/2.
//

import UIKit
extension UIView{
    func swiftDrawBoardDottedLine(width:CGFloat,lenth:CGFloat,space:CGFloat,cornerRadius:CGFloat,color:UIColor){
        self.layer.cornerRadius = cornerRadius
        let borderLayer =  CAShapeLayer()
        borderLayer.bounds = self.bounds
        
        borderLayer.position = CGPoint(x: self.bounds.midX, y: self.bounds.midY);
        borderLayer.path = UIBezierPath(roundedRect: borderLayer.bounds, cornerRadius: cornerRadius).cgPath
        borderLayer.lineWidth = width / UIScreen.main.scale
        
        //虚线边框---小边框的长度
        
        borderLayer.lineDashPattern = [lenth,space] as? [NSNumber] //前边是虚线的长度,后边是虚线之间空隙的长度
        borderLayer.lineDashPhase = 0.1;
        //实线边框
        
        borderLayer.fillColor = UIColor.clear.cgColor
        borderLayer.strokeColor = color.cgColor
        self.layer.addSublayer(borderLayer)
        
        
    }
}

在swift里面调用类扩展

//
//  ViewController.swift
//  画虚线
//
//  Created by tdw on 2020/12/2.
//

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let v1 = UIView()
        v1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
        v1.backgroundColor = UIColor.yellow
        //调用oc类扩展
        v1.drawBoardDottedLine(3, lenth: 5, space: 3, cornerRadius: 10, color: UIColor.red)
        view.addSubview(v1)
        
        
        let v2 = UIView()
        v2.frame = CGRect(x: 50, y: 200, width: 100, height: 100)
        v2.backgroundColor = UIColor.lightGray
        //调用swift类扩展
        v2.swiftDrawBoardDottedLine(width: 5, lenth: 4, space: 2, cornerRadius: 4 ,color:UIColor.orange)
        view.addSubview(v2)
        
        
    }


}

运行结果

在这里插入图片描述

代码网址:请用xcode 12.2 以上运行

https://download.csdn.net/download/boildoctor/13582886

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值