क्या आईफोन पर कोर-प्लॉट चार्ट घटक के साथ ज़ूम-इन और ज़ूम-आउट को कार्यान्वित करना संभव है? यदि ऐसा है तो कृपया मुझे सुझाव दें कि यह कैसे करें?आईफोन पर कोर-प्लॉट लाइन चार्ट के साथ ज़ूम-इन और ज़ूम-आउट को कैसे कार्यान्वित करें?
अग्रिम धन्यवाद।
क्या आईफोन पर कोर-प्लॉट चार्ट घटक के साथ ज़ूम-इन और ज़ूम-आउट को कार्यान्वित करना संभव है? यदि ऐसा है तो कृपया मुझे सुझाव दें कि यह कैसे करें?आईफोन पर कोर-प्लॉट लाइन चार्ट के साथ ज़ूम-इन और ज़ूम-आउट को कैसे कार्यान्वित करें?
अग्रिम धन्यवाद।
हाँ, मैं जिस तरह से यह बहुत तरह PlotSpace का समायोजन करके है (शायद नहीं सबसे अच्छा समाधान है, लेकिन सबसे अच्छा एक मैं के साथ आ सकता है):
-(void)zoomOut
{
CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
graphScaleX+=5;
graphScaleY+=5;
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:plotSpace.xRange.location length:CPDecimalFromFloat(graphScaleX)];
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:plotSpace.yRange.location length:CPDecimalFromFloat(graphScaleY)];
}
-(void)zoomIn
{
CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
graphScaleX-=5;
graphScaleY-=5;
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:plotSpace.xRange.location length:CPDecimalFromFloat(graphScaleX)];
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:plotSpace.yRange.location length:CPDecimalFromFloat(graphScaleY)];
}
आप कुछ करने के लिए plotSpace प्रतिनिधि सेट कर सकते हैं वर्ग उदाहरण जो CPTPlotSpaceDelegate प्रोटोकॉल (उदाहरण के लिए स्वयं) [plotSpace setDelegate:self];
के अनुरूप है।
कॉन्फ़िगर plotSpace तो यह उपयोगकर्ता [plotSpace setAllowsUserInteraction:YES];
और फिर उस वर्ग में इस विधि -(BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint
लागू साथ सूचना का आदान। यदि आप कोरप्लॉट को स्वचालित रूप से अपने ग्राफ का आकार बदलना चाहते हैं तो हाँ वापस करें। या नहीं और पिछले जवाब में कुछ ऐसा करें।
नोट: यदि आप अपने वर्तमान नियंत्रक वर्ग (स्वयं) को प्रतिनिधि बनना चाहते हैं, तो सुनिश्चित करें कि आपका इंटरफ़ेस इस @interface CurrentController : UISomeController<...,CPTPlotSpaceDelegate>{}
जैसा दिखता है। तो अब यह CPTPlotSpaceDelegate प्रोटोकॉल के अनुरूप है।
डिफ़ॉल्ट उपयोगकर्ता बातचीत का उपयोग नहीं करने के लिए पर्याप्त मेरे लिए क्योंकि था:
मेरे समाधान इसे अपने आप को क्या करना था
मुझे लगता है मैं तो मैं क्या जरूरत करने के लिए कोड लागू किया, पान के लिए 2 UIGestureRecognizer जोड़ा ज़ूम
UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panChart:)];
[pan setMinimumNumberOfTouches:1];
[pan setMaximumNumberOfTouches:1];
[self.view addGestureRecognizer:pan];
UIPinchGestureRecognizer* scale = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scaleChart:)];
[self.view addGestureRecognizer:scale];
पान चार्ट
- (void)panChart:(UIPinchGestureRecognizer *)gestureRecognizer {
CPTGraph *theGraph = [graphs objectAtIndex:0];
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)theGraph.defaultPlotSpace;
CGPoint point = [gestureRecognizer locationInView:self.view];
if([(UIPanGestureRecognizer*)gestureRecognizer state] == UIGestureRecognizerStateBegan) {
firstX = point.x;
firstY = point.y;
originX = chartBounds.origin.x;
originY = chartBounds.origin.y;
//NSLog(@"first (%f,%f)", firstX, firstY);
}
CGRect frame = theGraph.frame;
float xMove = ((firstX-point.x)/(frame.size.width/chartBounds.size.width));
float yMove = ((firstY-point.y)/(frame.size.height/chartBounds.size.height));
if(firstX-point.x == 0){
xMove = 0;
}
if(firstY-point.y == 0){
yMove = 0;
}
//NSLog(@"frame: (%f, %f)",frame.size.width, frame.size.height);
//NSLog(@"touch (%f,%f)",firstX-point.x,firstY-point.y);
//NSLog(@"move (%f,%f)",xMove,yMove);
chartBounds.origin.x = originX+xMove;
chartBounds.origin.y = originY-yMove;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(chartBounds.origin.x) length:CPTDecimalFromFloat(chartBounds.size.width)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(chartBounds.origin.y) length:CPTDecimalFromFloat(chartBounds.size.height)];
}
स्केल चार्ट
- (void)scaleChart:(UIPinchGestureRecognizer *)gestureRecognizer {
if (kMaxDataPoints < kDataPointsHistory) {
if ([gestureRecognizer scale] < 1) {
if(kMaxDataPoints/10 < 1){
kMaxDataPoints += 1;
}else{
kMaxDataPoints += kMaxDataPoints/10;
}
}
}
if (kMaxDataPoints > 5) {
if ([gestureRecognizer scale] > 1){
if(kMaxDataPoints/10 < 1){
kMaxDataPoints -= 1;
}else{
kMaxDataPoints -= kMaxDataPoints/10;
}
}
}
if(kMaxDataPoints <= 5){
kMaxDataPoints = 5;
}
if(kMaxDataPoints > kDataPointsHistory){
kMaxDataPoints = kDataPointsHistory;
}
chartBounds.size.width = kMaxDataPoints;
CPTGraph *theGraph = [graphs objectAtIndex:0];
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)theGraph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(chartBounds.origin.x) length:CPTDecimalFromFloat(chartBounds.size.width)];
//Need to calculate if its horizontal or vertical pinch gesture (not doing that yet :))
//plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(chartBounds.origin.y) length:CPTDecimalFromFloat(chartBounds.size.height)];
}
कोड में कुछ बिंदु गायब हैं, कृपया आप पूरा कोड प्रदान कर सकते हैं? –
पैमाने पर करने के लिए केवल में एक्स अक्ष सिर्फ प्रतिनिधि में पुराने एक होने का नया y पैमाने पर मजबूर:
-(BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint;
जहां यू आर इस तरीकों बुला? इस विधि के साथ – Pooja
मुझे लगता है कि ज़ूम केंद्रित नहीं है, साजिश के केंद्र को ज़ूम करने का एक तरीका है? – kikko088