不能再在 CorePlot (v2.3) 中子类化 CPTGraphHostingView 了吗?
Can't subclass CPTGraphHostingView in CorePlot anymore (v2.3)?
我刚刚用最新版本的 CorePlot 更新了我的应用程序(v2.3,我之前是 运行 < 2.0 的版本)。
我没有收到任何错误,但是我的图表已经消失了。
我曾经通过做类似的事情来子类化 CPTGraphHostingView:
final class GraphView: CPTGraphHostingView, CPTPlotDataSource {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configureGraph()
...
}
fileprivate func configureGraph() {
// Graph theme
graph.apply(CPTTheme(named: .plainWhiteTheme))
// Hosting view
self.hostedGraph = graph
// Plot Space
plotSpace = graph.defaultPlotSpace as! CPTXYPlotSpace
}
我注意到子类化 UIView 而不是 CPTGraphHostingView 适用于新版本:
final class GraphView: UIView, CPTPlotDataSource {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configureGraph()
...
}
fileprivate func configureGraph() {
// Graph theme
graph.apply(CPTTheme(named: .plainWhiteTheme))
// Hosting view
let hostingView = CPTGraphHostingView(frame: self.frame)
hostingView.hostedGraph = graph
self.addSubview(hostingView)
// Plot Space
plotSpace = graph.defaultPlotSpace as! CPTXYPlotSpace
}
在大多数情况下都很好,但我的一个图表位于 ScrollView(启用分页)上,因此在这种情况下为 hostingView
获取 self.frame
并不容易。
我在这个新版本中遗漏了什么吗?
谢谢!
在调整托管视图大小时使用 bounds
而不是 frame
。
let hostingView = CPTGraphHostingView(frame: self.bounds)
所以根据 Eric 的回答,我删除了子类并简单地向托管视图添加了约束:
fileprivate func configureGraph() {
// Graph theme
graph.apply(CPTTheme(named: .plainWhiteTheme))
let hostingView = CPTGraphHostingView(frame: self.bounds)
hostingView.hostedGraph = self.graph
self.addSubview(hostingView)
hostingView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
hostingView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0),
hostingView.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 0),
hostingView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1),
hostingView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1)
])
// Plot Space
plotSpace = graph.defaultPlotSpace as! CPTXYPlotSpace
}
我刚刚用最新版本的 CorePlot 更新了我的应用程序(v2.3,我之前是 运行 < 2.0 的版本)。 我没有收到任何错误,但是我的图表已经消失了。 我曾经通过做类似的事情来子类化 CPTGraphHostingView:
final class GraphView: CPTGraphHostingView, CPTPlotDataSource {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configureGraph()
...
}
fileprivate func configureGraph() {
// Graph theme
graph.apply(CPTTheme(named: .plainWhiteTheme))
// Hosting view
self.hostedGraph = graph
// Plot Space
plotSpace = graph.defaultPlotSpace as! CPTXYPlotSpace
}
我注意到子类化 UIView 而不是 CPTGraphHostingView 适用于新版本:
final class GraphView: UIView, CPTPlotDataSource {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configureGraph()
...
}
fileprivate func configureGraph() {
// Graph theme
graph.apply(CPTTheme(named: .plainWhiteTheme))
// Hosting view
let hostingView = CPTGraphHostingView(frame: self.frame)
hostingView.hostedGraph = graph
self.addSubview(hostingView)
// Plot Space
plotSpace = graph.defaultPlotSpace as! CPTXYPlotSpace
}
在大多数情况下都很好,但我的一个图表位于 ScrollView(启用分页)上,因此在这种情况下为 hostingView
获取 self.frame
并不容易。
我在这个新版本中遗漏了什么吗?
谢谢!
在调整托管视图大小时使用 bounds
而不是 frame
。
let hostingView = CPTGraphHostingView(frame: self.bounds)
所以根据 Eric 的回答,我删除了子类并简单地向托管视图添加了约束:
fileprivate func configureGraph() {
// Graph theme
graph.apply(CPTTheme(named: .plainWhiteTheme))
let hostingView = CPTGraphHostingView(frame: self.bounds)
hostingView.hostedGraph = self.graph
self.addSubview(hostingView)
hostingView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
hostingView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 0),
hostingView.topAnchor.constraint(equalTo: self.safeAreaLayoutGuide.topAnchor, constant: 0),
hostingView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1),
hostingView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 1)
])
// Plot Space
plotSpace = graph.defaultPlotSpace as! CPTXYPlotSpace
}