feb19.jp

Nobuhiro Takahashi
Designer / Engineer

Objective-C で Tween ライブラリ作ったよ!

Qiita の Objective-C Advent Calendar 記事として書いた内容ですが、 GitHub にて iOS/Mac のプログラミング環境 Objective-C で使える Tween ライブラリを公開しました(元々オレオレライブラリとして使っていたものです)。

使い方は Qiitaで、ダウンロードは GitHub から。


Objective-C を難しくさせている理由の一つとして、ターゲットや、やりたいことによって、「Objective-C のメソッド」を使うのか「C の関数」を使うのか 「Objective-C のプロパティ」を使うのか(※1) 色々あるので、柔軟な View 系ライブラリが作りにくい所にあるんじゃないかなと思っています。(なので表現系ライブラリは Cocos2D や C4iOS 級に大きくなるとか、メンテが行き届いていない古いライブラリが使えなくなっていくとか...)


このライブラリでは、「開始時の値」と「終了時の値」「時間」「ディレイ時間」「イージング」を指定することによって、「中間の値」を自動的に算出する基本的な Tween 機能を搭載しました。「Start/Update/End」三つのコールバックによってその値を取り出すことが出来ます。

こんな感じで使います。

#import "Tween.h"
#import "TweenObject.h"
  
- (IBAction)buttonWasTapped:(id)sender
{
    [Tween addTween:self
            tweenId:0
         startValue:10
           endValue:290
               time:2
              delay:0
             easing:@"easeNone"
           startSEL:nil
          updateSEL:@selector(update:)
             endSEL:@selector(end:)];
}
- (void)update:(TweenObject *)tween
{
    self.view.frame  = CGRectMake(tween.currentValue,5,20,20);
}
- (void)end:(TweenObject *)tween
{
    self.view.frame  = CGRectMake(tween.currentValue,5,20,20);
}

値の計算だけ Tween にさせて、代入はコールバックの tween.currentValue を使う、という感じです。ライブラリ側が面倒くさい所はコールバックで使用者にやってもらおうという、さじの投げ方をしております。w

ちなみにイージングの部分は例の Penner イージングセットが一通り使えます。


僕的には Tween と言えば Flash なので、GitHub とか見てこここうした方がいいとかあったら Objective-C もできる Flasher の方に是非 issue とか Pull Request とか頂けたらと思います。

コールバックの部分はブロック関数が使えるようにしたいとか、double[] 配列を与えたらその配列内で一斉に Tween したいとか、ActionScript の Tween24 みたいに超絶スマートにしたいとか、色々個人的な TODO ありますが、だれかが実装してくれたら最高です。w


※1 現時点の Mac OS X/iOS SDK は、スケールの変形を行う場合は CGAffineTransformMakeScale(sx, sy) を使うとか、透過度を変更する場合は UIView.alpha = a 、Dictionary の値は [NSNumber numberWithDouble:double] で一回ラップさせて代入するとか、ターゲットや目的によって呼び出し方法、取り出し方法をプログラマーが記述しわけなければならない。

Tweet Share Bookmark

Navigation

prev: Flash Builder 4.7 で電子署名できなくなってて AIR が書き出せないので adt コマンドでターミナルから署名するでござるよケンイチ氏の巻
next: JavaScript/Objective-C/Java/C# のメモサイトはじめました。

Recently Entries