gpt4 book ai didi

ios - 在 Swift 4 中绘制多条线

转载 作者:可可西里 更新时间:2023-11-01 01:07:34 26 4
gpt4 key购买 nike

在 Swift 4 中,借助 Xcode IDE,我可以轻松地使用以下代码绘制圆圈:

let circlePath = UIBezierPath(arcCenter: CGPoint(
x: 100,
y: 100),
radius: 50,
startAngle: CGFloat(0),
endAngle:CGFloat(Double.pi * 2),
clockwise: true)

let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.cgPath

shapeLayer.fillColor = UIColor.white.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 2.0

但是,我想从A点到B点画一条线,而不是画一个圆。我可以按照此处的示例代码画一条线:https://www.youtube.com/watch?v=9sJxtzTo8W0

为了使该行与示例中的显示方式相同,我需要更改主 Storyboard中的 View 。

  • 这是否意味着我在整个项目中只能有一种类型的自定义类在任何给定时间都可以查看?

  • 无论具体的 Storyboard View 如何,我都可以让台词默认可见吗?

  • 为什么不需要我定义类对象就可以渲染圆,而线需要我定义类对象?

  • 有没有一种方法可以简单地即时画一条线,就像我可以即时画一个圆圈一样?

最佳答案

Is there a way to simply draw a line on the fly, in the same way that I can draw a circle on the fly?

当然,只需使用 addLine(to:) 创建一个 UIBezierPath,然后在您的 CAShapeLayer path,就像您在示例中为圆圈所做的那样:

let startPoint = CGPoint(x: 10, y: 10)
let endPoint = CGPoint(x: 20, y: 5)

let linePath = UIBezierPath()
linePath.move(to: startPoint)
linePath.addLine(to: endPoint)

let shapeLayer = CAShapeLayer()
shapeLayer.path = linePath.cgPath

shapeLayer.fillColor = UIColor.white.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 2

view.layer.addSublayer(shapeLayer)

Why does the circle render without me needing to define a class object, but the line requires me to define a class object?

该行不需要您定义类对象。这只是另一种实现方式,您可以使用 CAShapeLayer 技术或 UIView 子类技术来制作直线和圆形(以及您想要的任何其他类型的形状)。它们都工作正常。

UIView 子类方法,您首先定义您的类:

class LineView: UIView {

var startPoint: CGPoint? { didSet { setNeedsDisplay() } }
var endPoint: CGPoint? { didSet { setNeedsDisplay() } }

override func draw(_ rect: CGRect) {
guard let startPoint = startPoint, let endPoint = endPoint else { return }

let linePath = UIBezierPath()
linePath.move(to: startPoint)
linePath.addLine(to: endPoint)
linePath.lineWidth = 2

UIColor.black.setStroke()
linePath.stroke()
}
}

然后实例化一个并将其添加到您的 View 层次结构中:

let lineView = LineView()
lineView.backgroundColor = .lightGray
lineView.translatesAutoresizingMaskIntoConstraints = false
lineView.startPoint = CGPoint(x: 10, y: 10)
lineView.endPoint = CGPoint(x: 20, y: 5)
view.addSubview(lineView)

NSLayoutConstraint.activate([
lineView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
lineView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10),
lineView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10),
lineView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10)
])

Does this mean that I can only have 1 type of custom class in my entire project that is viewable at any given time?

就像您可以添加任何您想要的 shapelayer 一样,您可以添加您自己的自定义 UIView 子类并添加任意数量。所以理论上你可以有几个子类类型,一个用于不同类型的形状(圆形、直线、圆角矩形等)并实例化它们并将它们作为 subview 添加到你想要的任何场景的任何 View 。

关于ios - 在 Swift 4 中绘制多条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385418/

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