\
2014年11月16日
Posted by 屋台ブルー at 2014年11月16日00:00 Comment(0)

Swiftで遊ぼう! - 128 - UIKit UIDynamicAnimator/collision

Swiftで遊ぼう! - 128 - UIKit UIDynamicAnimator/collision昨日まで書いたコードの場合、青い正方形はアプリが起動したとたんに重力のかかっている方向に流れて画面から消えてなくなってしまう。

次は境界線を作って青い正方形を止めるために利用するのが、UICollisionBehaviorクラスだ。すべてのUIDynamicBehaviorに言えることは、アイテムの位置情報をアレー型として保持する。UICollisionBehaviorも同じだ。

新しくインスタンスを宣言する。当然アンラップオプショナルで。

var collision: UICollisionBehavior!

そしてこのcollisionを初期化する時に画面上のオブジェクトsquareをアレー型で与える。

collision = UICollisionBehavior(items: [square])

次が重要なんですが、collisionに長ったらしい名前がついたプロパティがある。

translatesReferenceBoundsIntoBoundary

これはUIDynamicAnimatorをreferenceViewで初期化した時に初期値として設定されている境界線を使うかどうかのBoolean型プロパティってことで、初期値で設定されているのは画面の境界線でしょう。

ということで、これらを昨日のコードに付け加えると(太字が追加コード)。

import UIKit

class ViewController: UIViewController {

var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
var collision: UICollisionBehavior!

override func viewDidLoad() {
super.viewDidLoad()
let square = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
square.backgroundColor = UIColor.blueColor()
view.addSubview(square)

animator = UIDynamicAnimator(referenceView: view)
gravity = UIGravityBehavior(items: [square])
gravity.angle = 0.0
gravity.magnitude = 2.0
animator.addBehavior(gravity)

collision = UICollisionBehavior(items: [square])
collision.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collision)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

これをiOSエミュレーターで動かすと次のように動いて止まる。angleを0.0にしているとちょうど右方向に向かって画面に当たると止まる。
Swiftで遊ぼう! - 128 - UIKit UIDynamicAnimator/collision


しかし、これを下のように変更すると

import UIKit

class ViewController: UIViewController {

var animator: UIDynamicAnimator!
var gravity: UIGravityBehavior!
var collision: UICollisionBehavior!

override func viewDidLoad() {
super.viewDidLoad()
let square = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
square.backgroundColor = UIColor.blueColor()
view.addSubview(square)

animator = UIDynamicAnimator(referenceView: view)
gravity = UIGravityBehavior(items: [square])
gravity.angle = 0.5
gravity.magnitude = 1.0
animator.addBehavior(gravity)

collision = UICollisionBehavior(items: [square])
collision.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collision)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

面白いことに青い正方形は斜め右下に動いて画面の端に当たるとずるずると下に落ちていく。重力は下にかかっている。ちょうど真右だと静止するのにちょっt下向きだったら下に落ちていくのはどうしてでしょうね。
Swiftで遊ぼう! - 128 - UIKit UIDynamicAnimator/collision


まあどちらにしろこういう動きが数行のコードで実現できるって凄いですね。まだまだこれから

今日はここまで。


同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 128 - UIKit UIDynamicAnimator/collision
    コメント(0)