回答
是的,我做的是通過調整像這樣的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協議(例如self)[plotSpace setDelegate:self];
。
配置plotSpace所以它與用戶[plotSpace setAllowsUserInteraction:YES];
然後在這個類實現此方法-(BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint
交互。如果您希望corePlot自動調整圖形大小,請返回YES。或者不,並在之前的回答中做類似的事情。
注意:如果您希望您的當前控制器類(self)成爲委託人,請確保您的界面看起來像這樣@interface CurrentController : UISomeController<...,CPTPlotSpaceDelegate>{}
。所以現在它符合CPTPlotSpaceDelegate協議。
使用默認的用戶交互是不夠的,我是因爲:
- 它擴展兩個X & Y軸的同時,我只是想擴大 X軸
- 潘不允許你走過去的零它跳躍和 基本上不工作的權利..
我的解決辦法是做我自己
我加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)];
}
代碼中缺少一些要點,請您提供完整的代碼? –
要縮放僅在X軸只是迫使新y規模是舊的委託:
-(BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint;
- 1. 如何在iPhone上滾動和放大/縮小大圖像?
- 2. 在縮小/縮小地圖時禁用縮放/增加折線
- 3. 如何在iPhone中的文本視圖中放大和縮小?
- 4. 如何在iPhone應用程序的KendoUI折線圖中進行縮放和縮小?
- 5. 單擊JfreeChart折線圖上的按鈕放大和縮小功能?
- 6. 柔性折線圖縮放
- 7. SVG縮放的折線圖
- 8. 如何在cocos2d精靈圖片上實現放大/縮小效果?
- 9. ggplot2和Shiny:如何縮放圖形大小的圖例大小?
- 10. 如何使用coreplot爲折線圖設置textstyle?
- 11. 如何設置縮小放大和縮小放大縮小尺寸?
- 12. 即使放大和縮小Google地圖
- 13. 如何放大和縮小谷歌地圖上的圖標大小?
- 14. 如何在UIImagePickerController中實現自定義放大/縮小滑塊
- 15. 如何在iPhone上放大/放大/縮小UIImageView的某個部分?
- 16. 如何添加放大和縮小按鈕來映射在iphone
- 17. 如何在GWT中放大和縮小
- 18. 如何使用jquery放大和縮小圖像?
- 19. IOS UIImage縮放和裁剪,放大實際上使圖像變小?
- 20. 放大和縮小
- 21. 如何使用UIImageView調整圖片大小,以便放大和縮小?
- 22. 實現放大和縮小,在RichTextBox中的觸摸屏
- 23. 如何實現這種縮放和縮小功能
- 24. 如何捏縮放在asp.net框架和HTML5中放大和縮小圖像?
- 25. 如何使用Robotium放大/縮小?
- 26. 放大和縮小在IOS
- 27. 如何根據鍵盤大小正確實現縮小和擴大視圖?
- 28. WPF縮放控制實現小地圖
- 29. 如何放大和縮小iphone中的自定義縮放按鈕?
- 30. 在Android上實現捏和縮放SurfaceView
其中u R電話這個方法呢? – Pooja
用這種方法我看到縮放不居中,有一種方法可以放大繪圖的中心? – kikko088