例えば下記のような描画コードを書いておく。
FKRBlockDrawingRenderBlock renderBlock = ^(CGContextRef context, CGSize size) { CGRect rect = CGRectMake(0, 0, size.width, size.height); [[UIColor redColor] set]; CGContextAddEllipseInRect(context, rect); CGContextFillEllipseInRect(context, rect); [[UIColor blackColor] set]; [@"Hello World!" drawInRect:CGRectInset(rect, 5, 10) withFont:[UIFont boldSystemFontOfSize:14] lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter]; };このblocksを引数にして専用のビュー FKRBlockDrawingViewのインスタンスを作る。
FKRBlockDrawingView *view = [[FKRBlockDrawingView alloc] initWithFrame:frame renderBlock:renderBlock];後はこのビューを表示ビュー(UIViewController.viewなど)へ貼りつければ blocksの描画が行える。普通これをやろうとすると UIViewのサブクラスを作る必要があるが、このライブラリを使うと blocksを書くだけでカスタムな描画が容易に行える。
上記blocksから複数のビューを作って貼りつけた例
このライブラリの面白いところはさらに UIImage と CALayerのインスタンスも作れるところ。
UIImage *image = [UIImage imageWithRenderBlock:renderBlock size:size]; FKRBlockDrawingLayer *layer = [FKRBlockDrawingLayer layerWithRenderBlock:renderBlock];FKRBlockDrawingLayerはCALayerのサブクラス。
CG関数で描画した結果から容易にUIImageやCALayerが作れる。ちょっとしたCALayerのサブクラスを書くこともままあるので、blocksで描画を記述できるのは結構便利かも。
Readmeで紹介されているようにPaintCodeと一緒に使うとかなり強力かもしれない。
(参考)
- - -
今日は面白いアイディアの実装が多かった。こういう日は楽しい。
0 件のコメント:
コメントを投稿