GlitchKit - iOS でカジュアルにグリッチできるライブラリ
本日、社内外の iOS/Android 向け Tips 共有会、#potatotips 第二回 で、「XXXKit -それははしかのような物-」という内容を発表した。
最近 iOS (Objective-C) を今更ながらに学び始めたんだけど、新しい事を学んで今まで知らなかった/興味深いパラダイムがあると、それにどっぷりつかりがちで、それを プログラマにおけるはしか 、と言ったりする。
その中でかじってすぐに興味深いと感じたのは Objective-C の"カテゴリ"で。これはヘッダを import するだけ(実際は import するしない関わらずリンクされた時)で、様々なオブジェクトのクラスの挙動を拡張できる。Ruby における mixin + refinements のような物だし、Perl でも use して特定のオブジェクトの挙動を変えることが出来るが、Objective-C を学ぶまで、このようなことができることを知らなかった。
またこの "カテゴリ" と組み合わせて、標準のオブジェクトや UIKit といったフレームワークを拡張することができる XXXKit という語尾に Kit をつけたライブラリがある。たとえば EnumeratorKit なんかは、NSArray や NSDictionary で、Ruby の Enumerator 的なコードを書くことができるようになる。もちろんこれらは意図しない動作を引き起こす可能性もあるため、多用すると危険なのだが、そこは便利さとトレードオフなので、どうしてもオレオレ XXXKit を作りたくなる衝動がでてくる。
そのため、"カテゴリ" と "XXXKit" は Objective-C におけるはしかのようなものだなぁ、と感じた。と言うわけでカテゴリ使って Glitch する XXXKit を作ってみた。
Podfile に追加する
pod 'GlitchKit'
UIImageView -glitch でグリッチ
#import "GlitchKit.h"
// glitch!
[uiImageView glitch];
簡単便利
UIImageView -glitchWithBlock: でグリッチ
好きなようにグリッチさせる
// apply custom glitch
[uiImageView glitchWithBlock:^int(int byte, int index, uint length, Byte *bytes) {
return (byte == 42 && arc4random() % 3 == 1) ? 0 : byte;
}];
簡単便利
他にもUIImage クラスで以下が使えるようになる。
- (UIImage *)glitch;
- (UIImage )glitchWithBlock: (int (^)(int byte, int index, uint length, Byte bytes)) block;
- (NSData *)glitchData;
- (NSData )glitchDataWithBlock: (int (^)(int byte, int index, uint length, Byte bytes)) block;
どうぞカジュアルにごりようください。