gpt4 book ai didi

swift - 将 CAShapeLayer 添加到 subview

转载 作者:行者123 更新时间:2023-11-30 10:56:05 27 4
gpt4 key购买 nike

我尝试将 CAShapeLayer 添加到主视图(单 View 应用程序)上的较小 UIView 中。我对形状图层进行了动画处理并对触摸手势使用react以开始绘制它。但它是从主视图的中心绘制的,我需要能够移动它并限制它以实现布局目的。我看过另一篇文章,似乎也有同样的问题,但我认为我自己更困惑了。我在主 ViewController 的 viewDidLoad 函数中有以下代码。

这是我正在使用的一个测试项目,一旦我现有的应用程序运行起来,就可以向它添加新功能。

我尝试在项目的 MainStoryBoard 中添加 UIView,并将其链接到 ViewController.swift 文件(控制拖动)以创建导出,然后将 shapeLayer 和 trackLayer 添加到 UIView。

下面的代码

@IBOutlet weak var gaugeView: UIView!


override func viewDidLoad() {
super.viewDidLoad()

let centre = view.center

let circularPath = UIBezierPath(arcCenter: centre, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)

// Track Layer Under Gauge
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor.lightGray.cgColor
trackLayer.lineWidth = 10
trackLayer.fillColor = UIColor.clear.cgColor
//view.layer.addSublayer(trackLayer)
gaugeView.layer.addSublayer(trackLayer)

// Animated Circular Guage
shapeLayer.path = circularPath.cgPath
shapeLayer.strokeColor = UIColor.green.cgColor
shapeLayer.lineWidth = 10
shapeLayer.lineCap = .round
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeEnd = 0
//view.layer.addSublayer(shapeLayer)
gaugeView.layer.addSublayer(shapeLayer)
}

一旦我将应用程序放入模拟器中,当 view.layer.addSubLayer 未注释掉时,它会绘制圆圈并为其设置动画,但不会将其添加到包含 gaugeView.layer.addSubView 的 UIView 容器中。

Screen dump of the main storyboard

Screen dump once let center = gaugeView.center updated..

最佳答案

您需要设置centergaugeView center而不是view.center在这里,

override func viewDidLoad() {
super.viewDidLoad()

let centre = CGPoint(x: gaugeView.frame.width/2, y: gaugeView.frame.height/2)
...
}

注意:使用Autolayout时, viewDidLoad从来都不是使用的正确地方 framesubView autolayout 尚未列出。 。获取和使用 frame 的最佳地点是 viewDidLayoutSubviews .

关于swift - 将 CAShapeLayer 添加到 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944070/

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