首页 > 其他分享 >iOS 实现视图指定圆角

iOS 实现视图指定圆角

时间:2024-07-04 14:59:04浏览次数:18  
标签:圆角 corners self iOS 视图 UIRectCorner var IBInspectable public

需求

  • 可以设置单独设置视图的某个圆角
  • 可以设置几个指定的圆角
  • 可以设置是否绘制边框、边框宽度

实现原理

使用贝塞尔曲线实现

代码

由于不是很复杂,所以就直接贴上代码

import UIKit

@IBDesignable
public class CornerView: UIView {

    @IBInspectable public var drawBorder: Bool = false
    @IBInspectable public var borderWidth: CGFloat = 1.0
    @IBInspectable public var topCornerRadius: CGFloat = 10.0
    @IBInspectable public var topLeft: Bool = false
    @IBInspectable public var topRight: Bool = false
    @IBInspectable public var bottomLeft: Bool = false
    @IBInspectable public var bottomRight: Bool = false
    
    public override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    public required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
    
    public override func draw(_ rect: CGRect) {
        super.draw(rect)
        
        var corners: UInt = 0
        if self.topLeft == true {
            corners = corners | UIRectCorner.topLeft.rawValue
        }
        
        if self.topRight == true {
            corners = corners | UIRectCorner.topRight.rawValue
        }
        
        if self.bottomRight == true {
            corners = corners | UIRectCorner.bottomRight.rawValue
        }
        
        if self.bottomLeft == true {
            corners = corners | UIRectCorner.bottomLeft.rawValue
        }
        
        let topCorner: UIRectCorner = UIRectCorner(rawValue: corners)
        
        // 绘制圆角
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: topCorner, cornerRadii: CGSize(width: self.topCornerRadius, height: self.topCornerRadius))
        let maskLayer = CAShapeLayer()
        
        maskLayer.frame = self.bounds
        maskLayer.path = path.cgPath
        
        if drawBorder == true {
            // 绘制边框
            UIBezierPath.drawRightTopCornerBorder(width: self.width, cornerRadius: self.topCornerRadius, lineWidth: self.borderWidth, cornerColor: .white)
            UIBezierPath.drawLeftTopCornerBorder(cornerRadius: self.topCornerRadius, lineWidth: self.borderWidth, cornerColor: .white)
        }
        
        self.layer.mask = maskLayer
    }
    
    public override func layoutSubviews() {
        super.layoutSubviews()
    }
    
}

 

标签:圆角,corners,self,iOS,视图,UIRectCorner,var,IBInspectable,public
From: https://www.cnblogs.com/huangzhengguo/p/18283828

相关文章

  • Robust Test-Time Adaptation in Dynamic Scenarios--论文阅读
    论文笔记资料1.代码地址https://github.com/BIT-DA/RoTTA2.论文地址https://arxiv.org/abs/2303.138993.数据集地址comingsoon1论文摘要的翻译测试时间自适应(TTA)旨在使预先7训练的模型适用于仅具有未标记测试数据流的测试分布。大多数以前的TTA方法已经在简单的......
  • 混合开发H5页面的数字字体在IOS 安卓上显示不一样
    背景做完H5页面,UI走查的时候,发现IOS下数字的字体不对,安卓下是正常的,于是就查了下原因,以此做个记录看下实际效果左边是安卓,右边是IOS的效果,明显看出来数字的字体是不一样的安卓、IOS字体不一致的原因在安卓、IOS系统中,如果没有专门设置字体的话,会使用默认的字体,汉字,英文......
  • VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版
    VMwareESXi8.0U3macOSUnlocker&OEMBIOSHuawei(华为)FusionServer定制版ESXi8.0U3标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)、Huawei(华为)、xFusion(超聚变)OEM定制版请访问......
  • SpringMVC中的视图
    1、常见视图组件InternalResourceView:内部资源视图(SpringMVC框架内置的,专门为JSP模板语法准备的,也是为转发准备的)RedirectView:重定向视图(SpringMVC框架内置的,用来完成重定向效果)ThymeleafView:Thymeleaf视图(第三方的,为Thymeleaf模板语法准备的)FreeMarkerView:FreeMarker视图(......
  • Mysql中视图的使用以及常见运算符的使用示例和优先级
    场景基础知识回顾:mysql中视图的基础使用以及常见运算符的使用示例。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现Mysql中视图的使用视图的创建CREATEVIEWstu_viewASSELECT*FROMbus_student;视图查询SELECT*FROMstu_view;查看视图基本信息SHOWTAB......
  • Vue3全局配置Axios并解决跨域请求问题示例详解
    背景对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错:AccesstoXMLHttpRequestat'http://localh......
  • 如何从服务器bios清除磁盘数据
    解决问题并查找根源:一、服务空间不足,服务无法部署或服务不可用二、清理了大日志文件,但是空间还是不足1.首先是通过df-h命令查看磁盘的使用情况,主演是看Avail(可用)和Use(已用)的占用百分比,如下所示:df-hFilesystemSizeUsedAvailUse%Mountedon/dev/mapper/VolGroup-lv_r......
  • VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS ConnectX-3 网卡定制版 (集成驱动版)
    VMwareESXi8.0U3macOSUnlocker&OEMBIOSConnectX-3网卡定制版(集成驱动版)VMwareESXi8.0U3macOSUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)发布ESXi8.0U3集成驱动版,在个人电脑上运行企业级工作负载请访问原文链接:https://sysin.org/blog/vmwa......
  • AMD R2000 Bilby 单板 Inside BIOS 串口重定向的使用
    AMD嵌入式X86处理器的R2000系列使用Bilby开发板。开发板使用InsideBIOS。......
  • 服务器bios恢复出厂设置,设置u盘启动
    要让电脑开机从U盘启动,就像用光盘给电脑装系统要让电脑从光盘启动一样,必须在电脑开机时进行设置,因为电脑主板的差异所以设置的方法也是各不相同,bios设置u盘启动该怎么做。bios设置,选择启动项的键都是F12,开机的时候按F12键会出现启动项选择界面,从中选择从什么介质启动,一般可供选......