swift - 将 CAShapeLayer 添加到 subview

标签 swift uiview subview cashapelayer

我尝试将 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/

相关文章:

ios - 在 UITableView 中滚动时移动 View

iphone - 从不存在的 View 中删除 subview

swift - 您能否将类型和协议(protocol)结合起来,并将其用作枚举的基本类型?

ios - 如何使用 iOS 7 SpriteKit Particle 向不是游戏的 iOS App 添加粒子效果?

iphone - 一个 View Controller 可以处理多少个 subview 和 TableView

cocoa - 将 subview 添加到 NSView 以获得类似国际象棋的网格

ios - 导航到下一个和上一个 subview (就像菜单)

swift - 快速创建包含 2 列的 View

Swift 中的 JSON 错误

ios - iOS10使用Xcode8时AutoLayout无法正确显示