ピンチレコグナイザーを使用してプロットのサイズを変更する必要があります。左と下の小さな領域で「幅」と「高さ」を個別にサイズ変更できます。また、私のプロットは UIScrollView の内側にあり、水平方向にスクロールします
これは私のY軸ピンチコードです:
- (void)yAxisPinchPerformed:(UIPinchGestureRecognizer *)pinchRecognizer
{
CGFloat recognizerScale = pinchRecognizer.scale;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)_graph.defaultPlotSpace;
switch (pinchRecognizer.state) {
case UIGestureRecognizerStateBegan:
{
_savedRange = plotSpace.yRange;
}
break;
case UIGestureRecognizerStateChanged:
{
CGFloat scaledRange = recognizerScale * _savedRange;
[plotSpace setYRange:scaledRange];
}
break;
default:
break;
}
}
おそらく、表示領域だけでなく、プロット全体 (幅が広く、UIScrollView 内) を再描画するためです。私のプロットには、グラデーションで塗りつぶされた最大 100 本のバーが含まれています。充填をオフにしようとしましたが、少しだけ役に立ちました。
今、私はこれらの改善を持っています:
- (void)yAxisPinchPerformed:(UIPinchGestureRecognizer *)pinchRecognizer
{
CGFloat recognizerScale = pinchRecognizer.scale;
switch (pinchRecognizer.state) {
case UIGestureRecognizerStateBegan:
{
// UIImageView *_imageView;
[_imageView setImage:_graph.imageOfLayer];
[_imageView setHidden:NO];
// CGRect initialFrame is frame of graph container
[_imageView setFrame:initialFrame];
_savedHeigth = _imageView.frame.size.height;
}
break;
case UIGestureRecognizerStateChanged:
{
CGFloat scaledHeight = recognizerScale * _savedHeight;
CGRect imageFrame = _imageView.frame;
imageFrame.size.height = scaledHeight;
[_imageView setFrame:imageFrame];
}
break;
case UIGestureRecognizerStateEnded:
CGFloat scaledRange = calculateRangeFromHeights(...);
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)_graph.defaultPlotSpace;
[plotSpace setYRange:scaledRange];
[_imageView setHidden:YES];
break;
default:
break;
}
}
プロット レイヤーの画像を取得し、UIImageView のスケーリングを実行すると、超高速になります。しかし、Y スケールを小さくすると、グラフの一部しか表示されず、上部が切り取られます。
Core Plot グラフをスムーズかつリアルタイムにスケーリングできますか?