objective-c - CorePlot 中的缩放轴

标签 objective-c xcode ios core-plot

我有一个应用程序,我使用 CorePlot 来绘制图表。我已经用捏合手势实现了图表本身的缩放,但我仍然无法使轴附近的标签(包含 1、2 等数字)正确缩放,因此主要间隔变为 5 或0.5(或任何其他数字),具体取决于捏合手势。

-(void) viewDidAppear
{   
UIPinchGestureRecognizer* rec = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scalePiece:)];
// set options for this recognizer.
[self.view addGestureRecognizer:rec];

...
xMajorInterval = 1;
yMajorInterval = 1;

axisSet = (CPXYAxisSet *)graph.axisSet;

axisSet.xAxis.majorIntervalLength = CPDecimalFromFloat(xMajorInterval);
axisSet.xAxis.minorTicksPerInterval = 4;
axisSet.xAxis.minorTickLength = 4.0f;
axisSet.xAxis.majorTickLength = 8.0f;
axisSet.xAxis.labelOffset = 1.0f;

axisSet.yAxis.majorIntervalLength = CPDecimalFromFloat(yMajorInterval);
axisSet.yAxis.minorTicksPerInterval = 4;
axisSet.yAxis.minorTickLength = 4.0f;
axisSet.yAxis.majorTickLength = 8.0f;
axisSet.yAxis.labelOffset = 1.0f;




...


}

- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer {

//Here I tried to change xMajorInterval and yMajorInterval and redraw axes


}

这是我缩放绘图的方法

- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer {

if (PlotSpaceX > -0.1) {

if ([gestureRecognizer scale] > 1) {

    PlotSpaceY = PlotSpaceY - 0.1;
    PlotSpaceX = PlotSpaceX - 0.1;

}
}

if (PlotSpaceY >= -0.1) {
if ([gestureRecognizer scale] < 1){

    PlotSpaceY = PlotSpaceY + 0.1;
    PlotSpaceX = PlotSpaceX + 0.1;
}
}

plotSpace.xRange = [CPPlotRange plotRangeWithLocation:plotSpace.xRange.location length:CPDecimalFromFloat(PlotSpaceX * 2.0)];
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:plotSpace.yRange.location length:CPDecimalFromFloat(PlotSpaceY * 2.0)];
majorInterval = majorInterval*PlotSpaceX/4;

intMajorInterval = majorInterval;
NSLog(@"%i", intMajorInterval);
axisSet.xAxis.majorIntervalLength = CPDecimalFromInt(intMajorInterval);
axisSet.yAxis.majorIntervalLength = CPDecimalFromInt(intMajorInterval);


}

在scalePiece方法中,我尝试更改xMajorInterval和yMajorInterval并重绘轴,但不幸的是,在捏合手势期间经常调用此方法,以至于标签仅显示巨大的数字。

你能帮我一下吗?

最佳答案

这个问题的答案似乎取决于您如何缩放图表本身。

您基本上希望以与缩放绘图空间范围相同的方式缩放majorIntervalLength。也就是说,如果将范围扩大 2 倍,那么您还需要将majorIntervalLength 的值更改为当前值的两倍。如果扩展 1.1,则需要将majorIntervalLength 的当前值乘以1.1,然后将majorIntervalLength 设置为该新值。

如果您发布图形缩放的代码,我可以使用一些代码提供更详细的答案。

[更新] 看了你的代码后。我建议进行以下更改

在更新 PlotSpaceX 之前,请执行以下操作:

intervalScale = (PlotSpaceX + 0.1 / PlotSpaceX)

然后像这样更新majorInterval

majorInterval = majorInterval*intervalScale

这应该以与 x 坐标完全相同的方式缩放轴间隔。

关于objective-c - CorePlot 中的缩放轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044509/

相关文章:

ios - UITableView 单元格的动态高度问题(Swift)

ios - 如何避免插入重复记录?

xcode - 空气-lld : error: symbol(s) not found for target 'air64-apple-ios12.0.0' after update xcode to xcode 12

ios - 我是否必须更新我的 iPhone(到最新版本)才能将其与最新版本的 xcode 连接?

objective-c - Xcode 4 中的 OCUnit 和 C++?

ios - 如何一张一张删除UICollectionView图片

iphone - 如何检查设备时钟时间已在 iPhone 中更改

ios - 超链接按钮无响应 : iOS

iphone - 从文档目录读取 plist 文件时为空

ios - 在 Xcode Storyboard中的一个 View 上隐藏标签栏