首页 > 解决方案 > 在半圆形 Swift/UIView 上绘制比例尺

问题描述

想象一下,我有一个从单位圆到 Pi 的完整半圆。左边有一个小数叫 min,右边有一个大数叫 max。根据某些因素,应用程序内部两者都可以互换。你们中有人对如何像我在下图中那样绘制比例有一个很好的想法吗?我希望每个 x mod 10 = 0 有更长的线,中间有三个更大的线。灰色圆圈仅用于定位。

所以我从以下代码开始:

let radius = CGFloat(40)
let dashLong = CGFloat(10)
let dashShort = CGFloat(5)
let middle = CGPoint(x: 50, y: 50)
let leftAngle = CGFloat(Double.pi)
let rightAngle = CGFloat(0)
let min = 45 //random num
let max = 117 //random num



let innerPath = UIBezierPath(arcCenter: middle, radius: radius, startAngle: rightAngle, endAngle: leftAngle, clockwise: true)
let middlePath = UIBezierPath(arcCenter: middle, radius: radius+dashShort, startAngle: rightAngle, endAngle: leftAngle, clockwise: true)
let outerPath = UIBezierPath(arcCenter: middle, radius: radius+dashLong, startAngle: rightAngle, endAngle: leftAngle, clockwise: true)

因此,刻度中有两种类型的破折号的半径和长度。我选择了 45 和 117 作为尺度极值的随机整数。我不需要绘制的三个路径只是破折号需要开始和结束的方向。因此,对于 50,60,...110,从 innerPath 开始并到达外部路径,我很确定它必须处于相同的角度才能在所有圆圈上划线。

有没有人有一个非常聪明的想法如何继续计算破折号并绘制它们而不会弄乱代码?

在此处输入图像描述

标签: iosswiftuiviewdrawingscale

解决方案


我的建议是在 CALayer 中绘制这个半圆,并在不同的 CALayer 中从半圆的中心画线,然后将它们都遮住,这样它就看起来像这样


推荐阅读