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