菜鸟教程小白 发表于 2022-12-13 06:34:08

objective-c - CorePlot 中的缩放轴


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

<pre><code>-(void) viewDidAppear
{   
UIPinchGestureRecognizer* rec = [ initWithTarget:self action:@selector(scalePiece:)];
// set options for this recognizer.
;

...
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


}
</code></pre>

<p>这是我缩放绘图的方法</p>

<pre><code>- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer {

if (PlotSpaceX &gt; -0.1) {

if ( &gt; 1) {

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

}
}

if (PlotSpaceY &gt;= -0.1) {
if ( &lt; 1){

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

plotSpace.xRange = ;
plotSpace.yRange = ;
majorInterval = majorInterval*PlotSpaceX/4;

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


}
</code></pre>

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

<p>你能帮帮我吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这个问题的答案似乎取决于您如何缩放图表本身。</p>

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

<p>如果您发布用于图形缩放的代码,我可以通过一些代码提供更详细的答案。</p>

<p>[更新]
看了你的代码后。我会推荐以下更改</p>

<p>在更新 PlotSpaceX 之前,请执行以下操作:</p>

<pre><code>intervalScale = (PlotSpaceX + 0.1 / PlotSpaceX)
</code></pre>

<p>然后像这样更新<code>majorInterval</code></p>

<pre><code>majorInterval = majorInterval*intervalScale
</code></pre>

<p>这应该以与 x 坐标完全相同的方式缩放轴间隔。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - CorePlot 中的缩放轴,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/5044509/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/5044509/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - CorePlot 中的缩放轴