NSBlogger

意識高いブログ

UIPushBehaviorでViewに力を与える

UIPushBehavior

iOS7から追加されたUIKit Dynamicsに含まれるビヘイビアのひとつです。
UIKit Dynamics には重力をあたえたり、ViewとViewが衝突した際の動作であったり、Viewが指定した位置に吸い付いたりするアニメーションを作ることができます。
ゲーム用のSprite Kitとは違い、UIKit用の2次元物理エンジンとなります。

UIPushBehavior

「UIPushBehavior」を使ってみたので、その使い方を紹介します。
UIPushBehaviorを使うと、Viewに力を加えることができます。

事前準備

UIKit Dynamics を使うための事前準備です。
ヘッダーにこれらを宣言しておきます。

@property (nonatomic, strong) UIDynamicAnimator *animator;
@property (nonatomic, strong) UIPushBehavior *push;


ボディには初期設定および力を与える対象のViewを作っておきます。

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UIView *test = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    test.backgroundColor = [UIColor redColor];
    [self.view addSubview:test];

等速運動

    self.push = [[UIPushBehavior alloc] initWithItems:@[test] mode:UIPushBehaviorModeInstantaneous];
    [self.push setPushDirection:CGVectorMake(1.0, 0.0)];
    [self.animator addBehavior:self.push];

UIPushBehaviorModeInstantaneous」は一瞬力を加えるモードです。
「setPushDirection」でどの方向にどれくらい力を加えるか指定できます。
上記の場合だと、X軸に1.0, Y軸に0.0の力が与えられます。

最後に、UIDynamicAnimatorオブジェクトにビヘイビアを登録してあげれば動きますよ。

等加速度運動

    self.push = [[UIPushBehavior alloc] initWithItems:@[test] mode:UIPushBehaviorModeContinuous];
    [self.push setPushDirection:CGVectorMake(1.0, 0.0)];
    [self.animator addBehavior:self.push];

UIPushBehaviorModeContinuous」を指定すると、延々と指定した力が加えられていきます。
したがって上記の場合だと、X軸方向にどんどん速くなって動きます。

UIKit Dynamics Catalog

Appleがサンプルコードを公開しています。とても参考になるのでぜひ。
ボタンを押すとボタンがバウンドするようなものもあります。
https://developer.apple.com/LIBRARY/IOS/samplecode/DynamicsCatalog/Introduction/Intro.html