核心图:plotArea仅在viewDidLayoutSubviews之后更新

时间:2015-06-02 09:30:18

标签: ios swift core-plot

我使用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

1 个答案:

答案 0 :(得分:0)

-viewDidLayoutSubviews与视图层次结构的更新相关联。我不认为在视图布局之后布置托管视图中的核心动画层时有任何保证。

您可以随时在图表上调用-layoutIfNeeded,以确保其布局是最新的,然后再阅读其任何子图层的边界。