Swift 将CAShapeLayer添加到子视图
我试图将CAShapeLayer添加到主视图(单视图应用程序)上较小的UIView中。我将形状层设置为动画,并对触摸手势做出反应,开始绘制它。但它是从主视图的中心绘制的,我需要能够移动它并约束它,以便进行布局。我看到另一篇文章似乎也有同样的问题,但我想我更困惑了自己。我在主ViewController的viewDidLoad函数中有以下代码 这是一个测试项目,我正在玩添加新功能到我现有的应用程序,一旦我有它的工作 我已尝试在项目的主工具栏中添加UIView,并将其链接到ViewController.swift文件(控制拖动)以创建插座,然后将shapeLayer和trackLayer添加到UIView 下面的代码Swift 将CAShapeLayer添加到子视图,swift,uiview,subview,cashapelayer,Swift,Uiview,Subview,Cashapelayer,我试图将CAShapeLayer添加到主视图(单视图应用程序)上较小的UIView中。我将形状层设置为动画,并对触摸手势做出反应,开始绘制它。但它是从主视图的中心绘制的,我需要能够移动它并约束它,以便进行布局。我看到另一篇文章似乎也有同样的问题,但我想我更困惑了自己。我在主ViewController的viewDidLoad函数中有以下代码 这是一个测试项目,我正在玩添加新功能到我现有的应用程序,一旦我有它的工作 我已尝试在项目的主工具栏中添加UIView,并将其链接到ViewControlle
@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未注释掉时,它会绘制并设置圆圈动画,但不会将其添加到UIView容器中,gaugeView.layer.addSubView位于其中
您需要将
中心设置为gaugeView
中心
,而不是此处的视图。中心
override func viewDidLoad() {
super.viewDidLoad()
let centre = CGPoint(x: gaugeView.frame.width/2, y: gaugeView.frame.height/2)
...
}
注意:在使用Autolayout
时,viewDidLoad
绝不是使用子视图
的框架
的正确位置,该子视图尚未由Autolayout
布局。获取和使用框架的最佳位置是viewDidLayoutSubviews
是否要画一个圆?我已经有一段时间没有使用子层了,但是添加的子层是否可能在框架之外,并且视图具有clipsToBounds
true?是,它在主视图上工作,但在uiview中不工作。我需要它,我可以在主情节提要中包含它。创建uiview的自定义类,它是圆形视图,并将其放在main.storyboard上,然后只为uiview指定自定义类@MikeyC@AbhishekJadhav好的,这是否也允许我向UIView传递一个变量,以确定正在绘制的圆的属性?ie颜色和圆圈的绘制距离?它将被用作计时器倒计时的进度指示器。刚刚尝试过,请参阅模拟器中的第二个屏幕转储图片。这只是抛出一个错误,因为UIBezierPath需要一个CGpoint和。bounds是一个CGRectYeah。这应该可以解决let center=CGPoint(x:gaugeView.frame.width/2,y:gaugeView.frame.height/2)
Genius,解决了这个问题。请注意,我在前面的问题中确实试过了,但我想我忘了结尾的/2。非常感谢