CorePlot中两个绘图空间的缩放和平移



所以我有两个绘图空间,每个绘图空间上都有一个绘图。一个是散点图,另一个是条形图。

目前,我已经打开了缩放(禁用Y轴),并为平移提供了平移猜测识别器。

这是我的PlotSpace委托方法代码。

#pragma mark -
#pragma mark PlotSpace Delegates
- (CGPoint)plotSpace:(CPTPlotSpace *)space willDisplaceBy:(CGPoint)proposedDisplacementVector{
return CGPointMake(0, 0);
}
- (BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint {
return YES;
}
- (CPTPlotRange *)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate {
if (coordinate == CPTCoordinateX) {
[self checkIfCluster];
return [CPTPlotRange plotRangeWithLocation:newRange.location length:newRange.length];
} else {
if ([space.identifier  isEqual: @"barplotspace"]) {
return [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat(10)]; //Look out for other one.
}
return [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(0.0f) length:CPTDecimalFromFloat([self getMaxValue] * 1.25)]; //Look out for other one.
}
return nil;
}
- (void)plotSpace:(CPTPlotSpace *)space didChangePlotRangeForCoordinate:(CPTCoordinate)coordinate
{
[self updateStats];
}
-(void)handlePan:(UIPanGestureRecognizer *)sender{
CGPoint translation = [sender translationInView:self.view];
CPTXYPlotSpace *space = (CPTXYPlotSpace *)[self.hostView.hostedGraph defaultPlotSpace];
CGFloat movementDistance = space.xRange.lengthDouble / self.hostView.frame.size.width;
if (translation.x > 0) {
space.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(space.xRange.locationDouble - movementDistance * 30) length:space.xRange.length];
} else {
space.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(space.xRange.locationDouble + movementDistance * 30) length:space.xRange.length];
}
}

但是,我还将两个绘图空间在创建时的委托都设置为self(在其中定义了这些方法)。正在从条形图空间调用willChangePlotRangeTo。不是willDisplaceByshouldScaleBy。。。这很奇怪。我错过什么了吗?

-plotSpace:willDisplaceBy:委托方法仅在使用内置事件处理进行平移时从-pointingDeviceDraggedEvent:atPoint:方法调用。

-plotSpace:shouldScaleBy:aboutPoint:委托方法仅从-scaleBy:aboutPoint:方法调用。内置的捏手势识别器使用此方法来缩放绘图空间以响应手势。

我忘了打开允许用户在两个绘图空间上进行交互。

最新更新