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