1. nofrmm

    Posted

    nofrmm
Changes in title
+CorePlotでグラフ作成!storyboardでの扱いと極々短いサンプル
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,146 @@
+#はじめに
+
+なるべく日本語のサイトで見つかりにくかったところについて、です。
+組み込み方は、本家や他にもいろんな方が書いていますので割愛しました。
+
+#公式サイト
+https://code.google.com/p/core-plot/
+
+#探したけどみつからなかったこと
+##storyBoardで設定
+
+1. UIViewを配置
+
+2. Custom Classを UIView から CPTGraphHostingView に変更します
+![スクリーンショット 2013-12-20 3.17.23.png](https://qiita-image-store.s3.amazonaws.com/0/12362/086b2425-f0e2-df14-ee02-8cc786cb11b1.png)
+
+3.ViewControllerのheaderは次のような感じです
+
+```objc
+#import <UIKit/UIKit.h>
+#import "CorePlot-CocoaTouch.h"
+
+@interface YFViewController : UIViewController<CPTPlotDataSource>
+@property(weak,nonatomic) IBOutlet CPTGraphHostingView * graphView;
+@end
+```
+4.storyboardとつなぎます
+![スクリーンショット 2013-12-20 4.02.35.png](https://qiita-image-store.s3.amazonaws.com/0/12362/1ee7a63b-15b7-2974-6233-e716b3fd348d.png)
+
+##タッチイベントからパラメータを取得
+![スクリーンショット 2013-12-21 5.16.41.png](https://qiita-image-store.s3.amazonaws.com/0/12362/75ac9df4-049a-ca6e-35ba-81f6b39b47dc.png)
+
+
+###タッチポイントの位置をとる
+YFViewController.h
+
+```objc
+#import <UIKit/UIKit.h>
+#import "CorePlot-CocoaTouch.h"
+
+@interface YFViewController : UIViewController<CPTPlotDataSource,CPTPlotSpaceDelegate>
+@property(weak,nonatomic) IBOutlet CPTGraphHostingView * graphView;
+@end
+```
+YFViewController.m
+
+```objc
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+ CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:self.graphView.bounds];
+ CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
+ plotSpace.delegate = self;
+
+ //以降CPTScatterPlotのインスタンス作成など
+}
+
+#pragma mark -
+#pragma mark Plot Space Delegate Methods
+-(BOOL)plotSpace:(CPTPlotSpace *)space shouldHandlePointingDeviceDraggedEvent:(UIEvent *)event atPoint:(CGPoint)point
+{
+ //graph.plotAreaFrame.paddingLeft などをしている場合はx座標の調整が必要
+ NSLog(@"point.x : %f, ,point.y : %f",point.x,point.y);
+ return NO;
+}
+```
+###グラフ上のplotSymbolからパラメータを取得する
+
+YFViewController.h
+
+```objc
+#import <UIKit/UIKit.h>
+#import "CorePlot-CocoaTouch.h"
+
+@interface YFViewController : UIViewController<CPTPlotDataSource,CPTScatterPlotDelegate>
+@property(weak,nonatomic) IBOutlet CPTGraphHostingView * graphView;
+@property CPTScatterPlot *onePlot;
+@end
+```
+YFViewController.m
+
+```objc
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+ self.onePlot = [[CPTScatterPlot alloc] init];
+ self.onePlot.delegate = self;
+}
+#pragma mark -
+#pragma mark - ScatterPlot methods
+- (void)scatterPlot:(CPTScatterPlot *)plot plotSymbolWasSelectedAtRecordIndex:(NSUInteger)index
+{
+ NSLog(@"TAP! %d 番目" ,index);
+ //プロットデータに使用している配列から値を取り出すなど
+}
+```
+
+##plotSymbolをplotの状態によって変える
+
+![スクリーンショット 2013-12-21 5.11.44.png](https://qiita-image-store.s3.amazonaws.com/0/12362/ce81b1f6-6882-3da1-ffda-de142fa10e64.png)
+
+YFViewController.h
+
+```objc
+#import <UIKit/UIKit.h>
+#import "CorePlot-CocoaTouch.h"
+
+@interface YFViewController : UIViewController<CPTPlotDataSource>
+@property(weak,nonatomic) IBOutlet CPTGraphHostingView * graphView;
+@property CPTScatterPlot *onePlot;
+@end
+```
+YFViewController.m
+
+```objc
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+ self.onePlot = [[CPTScatterPlot alloc] init];
+ self.onePlot.dataSource = self;
+ self.onePlot.identifier = identifier;
+}
+
+-(CPTPlotSymbol *)symbolForScatterPlot:(CPTScatterPlot *)plot recordIndex:(NSUInteger)idx
+{
+ NSLog(@"plot.identifier: %@",plot.identifier);
+ CPTMutableLineStyle *oneSymbolLineStyle = [CPTMutableLineStyle lineStyle];
+ oneSymbolLineStyle.lineColor = [CPTColor redColor];
+ CPTPlotSymbol *oneSymbol = [CPTPlotSymbol ellipsePlotSymbol];
+
+ oneSymbol.fill = [CPTFill fillWithColor:[CPTColor whiteColor]];
+ oneSymbol.lineStyle = oneSymbolLineStyle;
+ oneSymbol.size = CGSizeMake(2.0f*idx, 2.0f*idx);
+ return oneSymbol;
+}
+```
+
+#公式以外の参考サイト
+http://www.raywenderlich.com/13269/how-to-draw-graphs-with-core-plot-part-1
+http://blog.essencework.com/post/8821955981/put-some-touch-interactive-to-coreplot-on-ipad-part-1
+#最後に
+CorePlotでグラフを書くことを思ったら
+ググってもリファレンスをみても難しいことが多く
+最後は公式のサンプルコード、headerファイルから持ってくる、試して納得することがあまりにも多かったです。
+
+専門書やblog記事などで記事が増えることを期待!