gpt4 book ai didi

swift - 计算虚线圆圈中的笔画属性 'Dash' - Swift

转载 作者:行者123 更新时间:2023-11-30 10:01:12 24 4
gpt4 key购买 nike

我正在开发一个应用程序。我还没有完成 Swift 2.2/3.0 的学徒期,我正在寻找一些答案。

第一:我正在使用 PaintCode 生成 Swift 代码的开头。我制作了具有以下属性的绘图:

enter image description here

代码 swift :

func drawSpeedView(strokeGap strokeGap: CGFloat = 30, strokeDash: CGFloat = 4, strokePhase: CGFloat = 0, strokeWidth: CGFloat = 31, strokeStartAngle: CGFloat = 225, strokeEndAngle: CGFloat = 315) {
//// General Declarations
let context = UIGraphicsGetCurrentContext()

//// DashedLarge Drawing
let dashedLargeRect = CGRect(x: 14.5, y: 17.5, width: 291, height: 291)
let dashedLargePath = UIBezierPath()
dashedLargePath.addArcWithCenter(CGPoint(x: dashedLargeRect.midX, y: dashedLargeRect.midY), radius: dashedLargeRect.width / 2, startAngle: -strokeStartAngle * CGFloat(M_PI)/180, endAngle: -strokeEndAngle * CGFloat(M_PI)/180, clockwise: true)

UIColor.blackColor().setStroke()
dashedLargePath.lineWidth = strokeWidth
CGContextSaveGState(context)
CGContextSetLineDash(context, strokePhase, [strokeDash, strokeGap], 2)
dashedLargePath.stroke()
CGContextRestoreGState(context)
}

我的问题:此代码针对 iPhone 5 进行了优化。对于点数字的比例,我需要为 iPhone 6/6s 和 6+/6s+ 的 StrokeDash 值创建计算

我需要什么:我还没有知识库来进行周长计算。

我需要计算更换线路:

CGContextSetLineDash(context, strokePhase, [strokeDash, strokeGap], 2)

用十进制数替换,无论圆的周长是多少,都可以在圆周围画上虚线 12/6/15。

有人能解决我的问题吗?

我从哪里开始?

最佳答案

iPhone 5 问题

正如您从该行中看到的那样(从您的代码片段中):

let dashedLargeRect = CGRect(x: 14.5, y: 17.5, width: 291, height: 291)

绘图空间定义为宽度291点和高度291点。

对这些数字进行硬编码是一个主意,因为正如您所注意到的,这意味着代码只能在某些设备上正常工作,而不能在其他设备上正常工作。

要解决此问题,您只需声明以下函数即可动态获取这些分辨率:

func windowHeight() -> CGFloat {
return UIScreen.mainScreen().applicationFrame.size.height
}

func windowWidth() -> CGFloat {
return UIScreen.mainScreen().applicationFrame.size.width
}

然后你可以创建dashedLargeRect例如:

let dashedLargeRect = CGRect(x: 14.5, y: 17.5, width: windowWidth()-20, height: windowHeight()-20)

通过这种方式,您可以使代码与设备无关,这始终是一种很好的做法。 (请注意,我还没有触及 CGRect “origin”,又名 xy 参数,考虑一下你的作业:))。

第二期

如果我理解正确的话,你想知道如何绘制虚线弧。

secret 就在眼前

dashedLargePath.addArcWithCenter(CGPoint(x: dashedLargeRect.midX, y: dashedLargeRect.midY), radius: dashedLargeRect.width / 2, startAngle: -strokeStartAngle * CGFloat(M_PI)/180, endAngle: -strokeEndAngle * CGFloat(M_PI)/180, clockwise: true)

可以查看addArcWithCenter文档here ,让我为您简化一下:

let arcCenter = CGPoint(x: dashedLargeRect.midX, y: dashedLargeRect.midY)
let radius = dashedLargeRect.width / 2
let startAngle = -strokeStartAngle * CGFloat(M_PI)/180
let endAngle = -strokeEndAngle * CGFloat(M_PI)/180

dashedLargePath.addArcWithCenter(arcCenter,
radius: radius,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)

现在这段代码的作用应该更清楚了,如果您想在这段代码上画另一条线(例如显示车速、风速、气压等),您所要做的就是调用具有更小/更大半径的类似函数,并且可能使用不同的线条样式(也称为更改 CGContextSetLineDashdashedLargePath.lineWidthUIColor.blackColor().setStroke() 线)。

关于swift - 计算虚线圆圈中的笔画属性 'Dash' - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com