Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift中更改旋转后,如何重新绘制位于UIView顶部的图层(CAShapeLayer)_Ios_Iphone_Swift_Uiview_Calayer - Fatal编程技术网

Ios 在swift中更改旋转后,如何重新绘制位于UIView顶部的图层(CAShapeLayer)

Ios 在swift中更改旋转后,如何重新绘制位于UIView顶部的图层(CAShapeLayer),ios,iphone,swift,uiview,calayer,Ios,Iphone,Swift,Uiview,Calayer,我试图创建从JSON获取的值生成的图表。我将它们放在图层上,并将它们作为子图层添加到视图中。问题是,在更改方向(或在收缩和缩放(在UIScrollView内部)之后(或期间),图形不会根据新修改的uiview重新绘制(我已应用自动布局)。 我正在尝试不同的方法来了解如何实现它,并且我看到,虽然在该视图中绘制的形状在方向之后被调整大小和修改,但没有添加到其中的层 在下面的代码中,我在我的图表视图uiview中添加了一个子视图(包含红色矩形)和一个图层(包含与内部矩形的一条对角线) class Ch

我试图创建从JSON获取的值生成的图表。我将它们放在图层上,并将它们作为子图层添加到视图中。问题是,在更改方向(或在收缩和缩放(在UIScrollView内部)之后(或期间),图形不会根据新修改的uiview重新绘制(我已应用自动布局)。 我正在尝试不同的方法来了解如何实现它,并且我看到,虽然在该视图中绘制的形状在方向之后被调整大小和修改,但没有添加到其中的层

在下面的代码中,我在我的图表视图uiview中添加了一个子视图(包含红色矩形)和一个图层(包含与内部矩形的一条对角线)

class ChartView: UIView {
override func drawRect(rect: CGRect) {
    let h = rect.height
    let w = rect.width
    var color:UIColor = UIColor.blackColor()
    let layer = CAShapeLayer()
    var drect = CGRect(x: (w * 0.25),y: (h * 0.25),width: (w * 0.5),height: (h * 0.5))
    var bpath:UIBezierPath = UIBezierPath(rect: drect)
    let view1 = UIView(frame: CGRect(x: (w * 0.1),y: (h * 0.1),width: (w * 0.2),height: (h * 0.2)))
    view1.backgroundColor = UIColor.redColor()
    self.addSubview(view1)
    var gridPath = CGPathCreateMutable()
    CGPathMoveToPoint(gridPath, nil, (w * 0.25), (h * 0.25))
    CGPathAddLineToPoint(gridPath, nil, (w * 0.25) + (w * 0.5), (h * 0.25) + (h * 0.5))
    layer.path = gridPath
    layer.strokeColor = UIColor.blackColor().CGColor
    layer.fillColor = UIColor.blackColor().CGColor
    self.layer.addSublayer(layer)
    color.set()
    bpath.stroke()
    }
}
我发现涉及类似的问题,但由于我是这个领域的新手,我无法完全理解如何实施以及在何处实施。

您(以及您链接的问题)都犯了错误。不应在drawRect中添加视图和图层。要么使用路径绘制此方法中的所有内容,要么在其他地方添加形状层,它们会自己绘制。谢谢@jrturton我发现了错误,并更正了它。你是对的,图层可以在外部绘制,它们会自己绘制。