我使用Swift的Core Plot的release-2.0分支。我的应用需要在图表上绘制内容。我使用viewDidLayoutSubviews
来检测边界的变化,比如在旋转到横向之后。我使用plotSpace.plotAreaViewPointForDoublePrecisionPlotPoint
定位子视图,但在viewDidLayoutSubviews
中,这会返回旧位置。经过一番挖掘后,我发现viewDidLayoutSubviews
hostedGraph.bounds
已正确更新但plotArea.bounds
尚未正确更新。以下代码显示plotArea.bounds
被调用后会更新viewDidLayoutSubviews
。
override func viewDidLayoutSubviews() {
println("from viewDidLayoutSubviews")
showBounds()
let time : dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, 0)
dispatch_after(time, dispatch_get_main_queue(), {
println("after viewDidLayoutSubviews")
self.showBounds()
})
}
func showBounds() {
println(chartView.hostedGraph.bounds)
println(chartView.hostedGraph.plotAreaFrame.plotArea.bounds)
}
// Output:
// from viewDidLayoutSubviews
// (0.0, 0.0, 667.0, 343.0)
// (0.0, 0.0, 361.0, 616.0)
// after viewDidLayoutSubviews
// (0.0, 0.0, 667.0, 343.0)
// (0.0, 0.0, 653.0, 324.0)
我不知道这是否是预期的行为。
如何在plotArea.bounds
中获得正确的viewDidLayoutSubviews
?
答案 0 :(得分:0)
-viewDidLayoutSubviews
与视图层次结构的更新相关联。我不认为在视图布局之后布置托管视图中的核心动画层时有任何保证。
您可以随时在图表上调用-layoutIfNeeded
,以确保其布局是最新的,然后再阅读其任何子图层的边界。