iphone - 核心图禁用 y 轴缩放、滚动

标签 iphone objective-c core-plot ipod

我想做这样的事情:http://youtu.be/PeRhxSCx2xM

我尝试实现这个方法:

//viewDidLoad
//plotSpace.delegate = self;

- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space
     willChangePlotRangeTo:(CPTPlotRange *)newRange
             forCoordinate:(CPTCoordinate)coordinate {

    NSLog(@"WillChangePlotRangeTo");

    // only allows scrolling to the right
    // remove this to have scrolling in both directions
    if (newRange.locationDouble < 0.0F) {
        newRange.location = CPTDecimalFromFloat(0.0);
    }

    // Adjust axis to keep them in view at the left and bottom;
    // adjust scale-labels to match the scroll.
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
    if (coordinate == CPTCoordinateX) {
        axisSet.yAxis.orthogonalCoordinateDecimal = newRange.location;
        axisSet.xAxis.titleLocation = CPTDecimalFromFloat(newRange.locationDouble +
                                                         (newRange.lengthDouble / 2.0F));
    } else {
        axisSet.xAxis.orthogonalCoordinateDecimal = newRange.location;
        axisSet.yAxis.titleLocation = CPTDecimalFromFloat(newRange.locationDouble +
                                                         (newRange.lengthDouble / 2.0F));
    }

    return newRange;
}

我尝试这样做,这个解决方案在我缩小时有效,但在我放大时无效。

plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1.0) length:CPTDecimalFromFloat(3.0)];
plotSpace.globalYRange = plotSpace.yRange;

请任何人向我解释一下,什么是正确的结果,以及它实际上是如何工作的。

感谢回复

最佳答案

最简单的方法是忽略 newRange 并返回现有的 yRange 作为 y 坐标。您也不必费心在此处更新轴属性。有更简单的方法可以做到这一点。

图形设置:

// leave the titleLocation for both axes at the default (NAN) to center the titles
xAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];

绘图空间委托(delegate):

- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space
      willChangePlotRangeTo:(CPTPlotRange *)newRange
              forCoordinate:(CPTCoordinate)coordinate {

    CPTPlotRange *updatedRange = nil;

    switch ( coordinate ) {
    case CPTCoordinateX:
        if (newRange.locationDouble < 0.0F) {
            CPTMutablePlotRange *mutableRange = [[newRange mutableCopy] autorelease];
            mutableRange.location = CPTDecimalFromFloat(0.0);
            updatedRange = mutableRange;
        }
        else {
            updatedRange = newRange;
        }
        break;
    case CPTCoordinateY:
        updatedRange = ((CPTXYPlotSpace *)space).yRange;
        break;
    }
    return updatedRange;
}

关于iphone - 核心图禁用 y 轴缩放、滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9495423/

相关文章:

iphone - NSPredicate 用于排除尚未保存在 NSFetchedResultsController 中的 NSManagedObjects

php - 在 mysql php webservice 中搜索

ios - Coreplot majorTickLocations 使用 View 坐标

iphone - D 编程和 iPhone

iphone - 不更新 iPhone 应用程序捆绑版本的后果?

iphone - 如何在负位置的 subview 上点击

ios - Firebase 桥接 header 不起作用

iphone - 像这样实现 Objective C init 方法有什么意义呢?

ios - 核心图 - 如何在单象限图中的轴顶部放置刻度?

ios - 当 x 轴变化时调整核心图中的 y 轴