UIKit Dynamics로 View를 떨어뜨리세요! (숨 쉬기)
UIView를 모두 낙하시켜 보는 것도 좋을지도 모릅니다.
iOS7에서 사용할 수있게 된 UIKit Dynamics를 사용하면 상당히 간단합니다.
그래서 조금 숨을 쉬고 SORDynamicAnimator (후술)하는 클래스를 만들어 보았습니다.
사용법은 간단.
살짝 2행 쓸 뿐・・・.
ViewController.swift
class ViewController: UIViewController {
//アニメーション中は保持する必要があります
var animator : SORDynamicAnimator?
override func viewDidLoad() {
super.viewDidLoad()
// アニメータ初期化
self.animator = SORDynamicAnimator(referenceView: self.view)
self.animator?.start()
}
}
SORDynamicAnimator.swift
class SORDynamicAnimator: NSObject {
let referenceView : UIView
private var items : [AnyObject] = []
private var animator : UIDynamicAnimator? //これをアニメーション中保持しておく必要あり!
init(referenceView : UIView) {
self.referenceView = referenceView
}
func start() {
if self.animator == nil {
let view : UIView = self.referenceView
var items : [AnyObject] = []
//レイアウトを強制的に更新
view.layoutIfNeeded()
//全てのsubViewを抽出
self.allSubviews(view)
//全てのsubViewからUILayoutSupportを省く
for item in self.items {
if item is UILayoutSupport {
continue
}
if item is UIDynamicItem {
items.append(item)
}
}
//アニメータ作成
let animator = UIDynamicAnimator(referenceView: view)
//重力設定
let gravityBeahvior = UIGravityBehavior(items: items)
animator.addBehavior(gravityBeahvior)
//衝突設定
let collisionBehavior = UICollisionBehavior(items: items)
collisionBehavior.translatesReferenceBoundsIntoBoundary = true
animator.addBehavior(collisionBehavior)
self.animator = animator
}
}
private func allSubviews(view : UIView) -> () {
for subview in view.subviews {
if subview is UIView {
self.items.append(subview)
self.allSubviews(subview as! UIView)
}
}
}
}
적당히 라벨이나 나란히 봐
표시와 동시에 무너져 가는 ,,,
덧붙여 TableView라든지 NavigationController라든지 사용하고 있으면 크래쉬 해 버립니다··.
Reference
이 문제에 관하여(UIKit Dynamics로 View를 떨어뜨리세요! (숨 쉬기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sora/items/7948d8b60a9e0da58046텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)