アプリ開発『WeightControl』vol.21
s7graphviewのライブラリでグラフを作成したいと思います。ただ、ググっていると、オリジナルのファイルがある場所は既に404エラーとなっているし、あまり最近のs7graphviewを使ったという記事が見つからないため、もしかしたらこの手法って既に古いのかな??とか思ってしまったり。。。
とはいっても、現時点ではあまりグラフを描画するための選択肢を持っていないので、ゴリゴリと今ある情報でコーディングしていきたいと思います。手順は前回の記事の通り、この記事を参考にして進めていきます。
その中で、結局ここのサイトから s7graphviewのライブラリをダウンロードすることになるのですが、どこからダウンロードすればいいのか最初全然わからなかったwww
で、結局気づいたのは、右カラムの「Download ZIP」からダウンロードできました。これがかなり気づきにくい。。。
とりあえず、ダウンロードできたら上記のこの記事の手順通りにやってみるのですが、まずはエラー等はなくビルドできる感じです。ただ、実際にビルドしてみると、いきなり下記のエラーが大量に表示されます。
【S7GraphView.m】
エラー①: 'release' is unavailable: not available in automatic reference counting mode
→こちらの記事に解消方法あり。deallocメソッド削除。
エラー②: ARC forbids explicit message send of 'release'
→こちらの記事に解消方法あり。[[UIColor blackColor] retain];ではなく、retainを削除して、[UIColor blackColor];だけにすることで解消。
エラー③:'retain' is unavailable: not available in automatic reference counting mode
→上記②と同様の対処で解消。
エラー④: Too many errors emitted, stopping now
→上記①〜③を解消することで消えました。具体的なエラーを指していたわけではなくて、単に、Xcode君に「おまぃ、エラー多すぎやんwww」っていうのを言われただけみたいです。
ただし、上記①-④を解消したところ、新たにこんなエラーが出現しました。
エラー⑤: Property implementation must have its declaration in interface 'SecondViewController'
エラー⑥: Property 'graphView' not found on object of type 'SecondViewController *'; did you mean to access instance variable 'graphView'?
→上記⑤、⑥はヘッダファイルで宣言しているgraphViewですが、何となくエラーの内容見て、既に宣言済みであることから、「self.graphView」を「graphView」だけにしたらエラーが解消されました。
【S7GraphView.h】
エラー: Existing instance variable '_dataSource' for property 'dataSource' with assign attribute must be __unsafe_unretained
→こちらの記事に従って、@interface S7GraphView : UIView の{}内に宣言しているものを削除した結果エラー解消しました!
さらに、下記のような警告が表示されていました。
【S7GraphView.m】
警告①: 'UILineBreakModeTailTruncation' is deprecated: first deprecated in iOS 6.0
警告②: 'UITextAlignmentRight' is deprecated: first deprecated in iOS 6.0
警告③: Implicit conversion from enumeration type 'enum UILineBreakMode' to different enumeration type 'NSLineBreakMode' (aka 'enum NSLineBreakMode')
警告④: Implicit conversion from enumeration type 'enum UITextAlignment' to different enumeration type 'NSTextAlignment' (aka 'enum NSTextAlignment')
→こちらの記事の【UILabel】を参考に変更したところ、警告解消。
警告⑤: 'drawInRect:withFont:lineBreakMode:alignment:' is deprecated: first deprecated in iOS 7.0 - Use -drawInRect:withAttributes:
→iOS7から仕様が変わったようですが、解決策不明のためシカトしました。
で、エラー無し、警告3のままでビルドしたところ、グラフが出ました!!
が、、、X軸のラベルの位置がズレている。。。なぜだー!!!
このあたりは、次回に持越したいと思います。。。
ちなみに、グラフを表示させたいクラスの実装ファイルやDelegate.m,
.hのコードはこちらからサンプルをダウンロードして、確認しながら調節しています。