首页 > 其他分享 >iOS开发_绘制圆角矩形虚线环

iOS开发_绘制圆角矩形虚线环

时间:2024-05-27 14:35:49浏览次数:16  
标签:圆角 frame iOS 虚线 radius context org size CGFloat

- (void)drawRect:(CGRect)rect {
    
    // 获取上下文(/画笔/绘图环境)
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 小段长度
    CGFloat line_dash = self.height / 20;
    
    // 虚线的样式:长5 空隙15 长10 空隙30 长2 空隙20...
    //CGFloat lengths[] = {5, 15, 10, 30, 2, 20};
    CGFloat lengths[] = {line_dash, 2 * line_dash};
    /**
     * phase 开始点 跳过多少个点数(0代表从头画)
     * lengths 虚线的样式
     * count 长度
    */
    // CGContextSetLineDash(<#CGContextRef c#>, <#CGFloat phase#>, <#const CGFloat *lengths#>, <#size_t count#>)
    CGContextSetLineDash(context, 1, lengths, sizeof(lengths) / sizeof(lengths[0]));
    // 在自身尺寸内缩进一点进行绘制
    CGFloat inset_offset = 2 * line_dash;
    
    CGRect frame = [self bounds:inset_offset];
    
    CGFloat org_x = frame.origin.x;
    CGFloat org_y = frame.origin.y;
    CGFloat size_w = frame.size.width;
    CGFloat size_h = frame.size.height;
    
    // 圆角半径
    CGFloat radius = 2 * line_dash;
    // 线条的宽度
    CGContextSetLineWidth(context, line_dash / 5.f);
    // 设置线条颜色
    [[UIColor whiteColor] set];
    
    // 开始坐标右边开始
    CGContextMoveToPoint(context, org_x + size_w, org_y + size_h - radius);
    // 右下角角度
    CGContextAddArcToPoint(context, org_x + size_w, org_y + size_h, org_x + size_w - radius, org_y + size_h, radius);
    // 左下角角度
    CGContextAddArcToPoint(context, org_x, org_y + size_h, org_x, org_y + size_h - radius, radius);
    // 左上角
    CGContextAddArcToPoint(context, org_x, org_y, org_x + radius, org_y, radius);
    // 右上角
    CGContextAddArcToPoint(context, org_x + size_w, org_y, org_x + size_w, org_y + radius, radius);
    // 圆角矩形闭环
    CGContextClosePath(context);
    
    // 画线
    CGContextStrokePath(context);
}

- (CGRect)bounds:(CGFloat)inset_offset {
    CGFloat org_x = inset_offset;
    CGFloat org_y = inset_offset;
    CGFloat size_w = self.width - 2 * inset_offset;
    CGFloat size_h = self.height - 2 * inset_offset;
    CGRect frame = CGRectMake(org_x, org_y, size_w, size_h);
    return frame;
}

标签:圆角,frame,iOS,虚线,radius,context,org,size,CGFloat
From: https://www.cnblogs.com/CH520/p/18215418

相关文章

  • 【VMware ESXi】使用 smbiosDump 命令获取服务器硬件信息。
    ESXi5.x之前版本,通过SSH连接至ESXi主机,同常规Linux发行版一样,可以使用dmidecode命令来了解服务器的硬件信息。但在之后版本的ESXi主机上,需要使用smbiosDump命令来获取服务器硬件信息,当然运行esxcfg-info命令也可以查找主机信息,不过并没有smbiosDump命令查看方便......
  • uniapp-vue3-oadmin|vite5.x手机后台实例多端仿ios管理系统
    uniapp-vue3-oadmin手机后台实例|vite5.x+uniapp多端仿ios管理系统 原创vue3+uniapp+uni-ui跨端仿ios桌面后台OA管理模板Uni-Vue3-WeOS。uniapp-vue3-os一款基于uni-app+vite5.x+pinia等技术开发的仿ios手机桌面OA管理系统。实现了自定义桌面栅格磁贴布局、多分屏滑动管理、......
  • Android14音频进阶之AAOS之CarAudioService如何衔接AudioControl服务(七十四)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • 【全开源】教育系统源码(支持微信小程序+移动端H5+安卓APP+IOS-APP)
    构建智慧教育的基石在当今信息化快速发展的时代,教育系统正面临着前所未有的变革。西陆教育系统源码,作为这一变革的先锋力量,以其卓越的性能和灵活性,为教育机构提供了全新的解决方案。一、源码的力量:定制化与可扩展性西陆教育系统源码的核心优势在于其高度的定制化和可扩展......
  • uniapp App去除iOS底部安全区域白边
    未设置的情况下,iOS底部安全区域白边如图:去除方法: 在 mainfest.json 中加入一下代码:"safearea":{"bottom":{"offset":"none"}},去除效果展示:......
  • 苹果iOS 18将于6月10日登场:Apple Music支持智能歌曲过渡功能
    据AppleInsider报道,苹果将会在iOS18和macOS15上带来AppleMusic的改进,支持“智能歌曲过渡”。据悉,目前的切歌功能是“交叉渐入渐出歌曲”,带来一些平滑效果,用户可以在1-12秒之间调节。而未来iOS18和macOS15系统上将支持智能调节,利用算法来调整最佳的切歌时间。此外,苹果还在......
  • VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 标准版和厂商定制版
    VMwareESXi8.0U2cmacOSUnlocker&OEMBIOS标准版和厂商定制版ESXi8.0U2标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)OEM定制版、Huawei(华为)定制版请访问原文链接:https://sysin.org......
  • VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动
    VMwareESXi8.0U2cmacOSUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)发布ESXi8.0U2集成驱动版,在个人电脑上运行企业级工作负载请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u2-sysin/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org202......
  • Vue搭建移动端h5项目(已开源,附带git地址)Vant+Vue Router+Vuex+axios封装+案例交互+部分
    一、项目介绍以及项目地址             项目介绍:vue2搭建。项目通过amfe-flexible与postcss-pxtorem实现移动端适配;通过Vantui作为项目的组件库;通过Vuex管理数据状态,进行模块化管理;通过VueRouter配置项目路由,进行模块化管理;封装axios进行数据的请求,以及一些页......
  • Unity安卓IOS一键打包
    添加菜单构建按钮,使用下面API进行构建,注意设置和配置等usingSystem;usingSystem.IO;usingAssetBundles;usingLiXiaoQian.Common.Editor.Tools;usingUnityEditor;usingUnityEngine;///打包工具publicclassBuildTool{[MenuItem("Tools/构建/Android平台")]......