CAShapeLayer 具有边框、填充颜色和舍入

2024-07-01

如何使用 CAShapeLayer 绘制一条同时具有边框颜色、边框宽度和填充颜色的线条?

这是我尝试过的,但它只是蓝色的......

self.lineShape.strokeColor = [UIColor blueColor].CGColor;
self.lineShape.fillColor = [UIColor greenColor].CGColor;
self.lineShape.lineWidth = 100;
self.lineShape.lineCap = kCALineCapRound;
self.lineShape.lineJoin = kCALineJoinRound;
UIBezierPath* path = [UIBezierPath bezierPath];
[path moveToPoint:self.lineStart];
[path addLineToPoint:self.lineEnd];
self.lineShape.path = path.CGPath;

Swift 3+ 扩展方法(结合下面的 AechoLiu 答案):

// Usage:
self.btnGroup.roundCorner([.topRight, .bottomRight], radius: 4.0, borderColor: UIColor.red, borderWidth: 1.0)

// Apply round corner and border. An extension method of UIView.
public func roundCorner(_ corners: UIRectCorner, radius: CGFloat, borderColor: UIColor, borderWidth: CGFloat) {

let path = UIBezierPath.init(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))

let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask

let borderPath = UIBezierPath.init(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let borderLayer = CAShapeLayer()
borderLayer.path = borderPath.cgPath
borderLayer.lineWidth = borderWidth
borderLayer.strokeColor = borderColor.cgColor
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.frame = self.bounds
self.layer.addSublayer(borderLayer)

}

Objective-C:

self.lineShapeBorder = [[CAShapeLayer alloc] init];
self.lineShapeBorder.zPosition = 0.0f;
self.lineShapeBorder.strokeColor = [UIColor blueColor].CGColor;
self.lineShapeBorder.lineWidth = 25;
self.lineShapeBorder.lineCap = kCALineCapRound;
self.lineShapeBorder.lineJoin = kCALineJoinRound;
     
self.lineShapeFill = [[CAShapeLayer alloc] init];
[self.lineShapeBorder addSublayer:self.lineShapeFill];
self.lineShapeFill.zPosition = 0.0f;
self.lineShapeFill.strokeColor = [UIColor greenColor].CGColor;
self.lineShapeFill.lineWidth = 20.0f;
self.lineShapeFill.lineCap = kCALineCapRound;
self.lineShapeFill.lineJoin = kCALineJoinRound;
  
// ...
    
UIBezierPath* path = [UIBezierPath bezierPath];
[path moveToPoint:self.lineStart];
[path addLineToPoint:self.lineEnd];
// call addLineToPoint over and over to create the outline for the shape
self.lineShapeBorder.path = self.lineShapeFill.path = path.CGPath;

还呼吁@FarrasDoko 评论尝试更改borderWidth to lineWidth and borderColor to strokeColor.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAShapeLayer 具有边框、填充颜色和舍入 的相关文章

随机推荐

  • 如何在golang中实现带附件的aws ses SendRawEmail

    我需要在 golang 中实现带附件的 Amazon ses SendRawEmail 我尝试使用以下代码 session err session NewSession svc ses New session aws Config Regi
  • Android 本地测试与仪表测试

    我正在尝试检查我的 API 在单元测试中是否可用 以确保它响应 200 现在 我的问题是我不太确定何时使用本地测试当我必须使用时Android 仪器测试 我知道我必须使用 Instrumented Tests 进行 UI 测试 但如何测试端
  • ActionBar 未在 API 16 中显示

    我是一个初学者 我制作了一个应用程序 其中包含导航抽屉以及 mainactivity 中的操作栏 它在 API 23 上完美运行 但在 API 16 中 操作栏没有显示 我搜索了许多关于 actionbar not 的链接显示 但他们在 A
  • 允许 bootstrap-ui 日期选择器中的 Moment.js 日期

    我正在尝试使用Bootstrap UI 的 http angular ui github io bootstrap 日期选择器 http angular ui github io bootstrap datepicker with Mome
  • VS2019 Roslyn编译器通用约束方法解析

    我们最近在代码库中发现了一个问题 VS2019 编译代码正常 但 VS 2017 失败 我为 Union 创建了一个扩展方法 它有一个通用 ISet 作为通用约束 using System using System Collections
  • 为什么成功消息在 ftplib 中被视为错误

    import ftplib server 192 168 1 109 user bob password likes sandwiches box ftplib FTP server box login user password s bo
  • 正确使用UseCallBack

    目前 每次更新查询参数时 我的代码都会重新呈现 一旦我删除查询参数 但是 我收到一条警告 指出 React Hook useCallback 缺少依赖项 query 要么包含它 要么删除依赖项数组react hooks exhaustive
  • osmar::get_osm() 下载 OSM 数据失败时出错:SYSTEM 或 PUBLIC,缺少 URI

    我正在关注一个tutorial https journal r project org archive 2013 RJ 2013 005 RJ 2013 005 pdf关于如何使用osmar包在R中下载OSM数据 所以代码是 library
  • 在 EAR 的不同 WAR 中分离相同的 jar

    目前我们面临一个问题 我们正在构建一个包含多个 war 文件的耳朵 其中 2 个 WAR 包含相同的 jar 这两个战争在部署期间都需要这些 jars 那么 ANT 有什么方法可以构建它 以便这些 jars 将位于一个位置 并且在耳朵部署期
  • 将带有渐变描边的 svg 导入到 paper.js 项目中

    Paper js 不显示带有从 SVG 导入的渐变的路径 这是一个例子https codepen io Husband pen LoomQo https codepen io Husband pen LoomQo正如您所看到的 带有描边颜色
  • 使用另一个数组的索引对 numpy 数组进行索引

    我有一个 numpy 数组 数据 其尺寸为 t z x y 这 维度代表时间 t 和三个空间维度 x y z 我有一个单独的索引数组 idx 其尺寸为 t x y 描述数据中的垂直坐标 idx 中的每个值描述一个 数据中的单个垂直级别 我想
  • ARM 中的 ROM 和 RAM

    我正在研究 ARM 处理器 我想知道所使用的 ROM 和 RAM 是否与我假设的有很大不同 例如 对于具有以下内存表的程序 Program Size Code 1264 RO data 16 RW data 0 ZI data 1384 它
  • 线性回归,在 MySQL 中求斜率

    我正在尝试查找以 DATETIME 作为 x 轴 以 y 轴为数字的数据集的斜率 我已经尝试了多种方法 当我将数据插入 Excel 时 没有任何东西可以匹配直线的斜率 它偏离了多个数量级 这就是我现在所拥有的 但它给我的斜率为 1 13e
  • 连接列表时 int 对象不可迭代?

    def get fail pass average number list for number in number list under 50 list over 50 list if number gt 50 over 50 list
  • 如何从 PHP 中的两个日期范围中提取每周一和每两周的周一?

    我正在使用臭名昭著的 jQuery UI 的日期选择器 并在我的表单中选择两个日期的范围 首先代表的是starting另一个代表日期end date 我现在需要的是算法 一些提示和方向或帮助者来计算这两个日期之间的每个星期一 例如 star
  • bootstrap jQuery 验证插件..错误放置问题

    所以我已经在我的代码中实现了 jquery 验证插件 如下面的代码所示 但是我在显示所有选项之后的错误代码时遇到了问题 此时它被放置在第一个按钮选项中 任何人都可以帮助更改我在 JavaScript 中的错误放置代码 以便将错误放置在每个组
  • 有没有办法让搜索机器人忽略某些文本? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有我的博客 如果你愿意 你可以从我的个人资料中看到它 它是新鲜的 谷歌机器人解析结果也是如此 结果令我震惊 显然 我的网站上最常见的两个
  • C++11 正则表达式是否适用于 UTF-8 字符串?

    如果我想将 C 11 的正则表达式与 unicode 字符串一起使用 它们是否可以将 char 作为 UTF 8 使用 还是必须将它们转换为 wchar t 字符串 您需要测试您的编译器和您正在使用的系统 但理论上 如果您的系统具有 UTF
  • 在 AWS 上的 VPC 中可以创建的最小子网是多少?

    我想将子网中可以运行的实例数量限制为尽可能少的实例数量 与 IAM 角色相结合 我可以限制用户可以在我的 AWS 账户上创建的实例数量 请参阅https forums aws amazon com thread jspa threadID
  • CAShapeLayer 具有边框、填充颜色和舍入

    如何使用 CAShapeLayer 绘制一条同时具有边框颜色 边框宽度和填充颜色的线条 这是我尝试过的 但它只是蓝色的 self lineShape strokeColor UIColor blueColor CGColor self li