View
4.454
Download
1
Category
Preview:
Citation preview
Yusuke Kawanabe @jeffsuke
Mobile App Developer at Gunosy
Blog: Jeffsuke is not a pen. http://jeffsuke.hatenablog.com/
Working on Auto Layout book
from Getting Started with Multitasking on iPad in iOS 9 https://developer.apple.com/videos/wwdc/2015/?id=205
Adaptive User Interface?
どんな画面サイズや向きでもサポートする事によってアプリの経験は格段に向上します。iOS8におけるView Controlerの進化や、XcodeにおけるAuto Layoutが、複数の状態やデバイスサイズの違いに対して、あなたのアプリをより簡単にAdapt(適応)することを可能にします。
from https://developer.apple.com/design/adaptivity/ (Yusuke Kawanabe意訳)
UISplitViewController
• MasterView/DetailViewのレイアウトを実現できる。
• iPhoneならナビゲーション、iPadならスプリットビューを表示してくれる。
Adaptive User Interfaceまでの道のり
• iPadマルチタスクに対応する
• Size Classを用いて複数画面サイズ、回転に対応する
• Auto Layoutを有効活用しレイアウトを生成する
気になること
• 簡単にマルチタスクに対応アプリになってしまう。マルチタスキング対応の条件を満たしており、横幅がCompactのレイアウト等の従来iPadアプリを作る上で必要なかったレイアウトを考慮していないアプリはリジェクト対象になってしまう可能性があるのでは?
Size Class
enum UIUserInterfaceSizeClass: Int { case Unspecified case Compact case Regular }
After iOS8
UITraitCollection
horizontalSizeClass Compact
verticalSizeClass Regular
userfaceIdiom Phone
displayScale 2.0
UIScreen
UIWindow
UIViewController
UIView
マルチタスキング時
horizontalSizeClass Compact
verticalSizeClass Regular
UIScreen.mainScreen().boundsUIWindow().bounds
iOS8以前の回転動作
func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval)
func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation)
func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval)
UIViewController
iOS8以前の回転動作
func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval)
func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation)
func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval)
UIViewController
端末が縦向きだとか横向きだとか いう時代は終わった!
iOS8以降の回転動作
func willTransitionToTraitCollection(newCollection: UITraitCollection, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
UITraitEnvironment
UIContentContainer
func traitCollectionDidChange(previousTraitCollection: UITraitCollection?)
回転とSize ClassSetup
Create Animation
Run Animation
Cleanup
willTransitionToTraitCollectionviewWillTransitionToSizetraitCollectionDidChange
回転とSize ClassSetup
Create Animation
Run Animation
Cleanup
willTransitionToTraitCollectionviewWillTransitionToSizetraitCollectionDidChange
Self Sizing Cell
iOS7以前
• セルのインスタンスを生成し、オフスクリーンでレイアウト実行しセルの高さを取得していた。
iOS8以降
• セルが表示される直前に、セルの高さを自動で計算。
Self Sizing Cell
tableView.estimatedRowHeight = 120.0 tableView.rowHeight = UITableViewAutomaticDimension
Perfomanceの向上
let constraints = [ NSLayoutConstraint.constraintsWithVisualFormat("|[view]|", options: nil, metrics: nil, views: views) ]
NSLayoutConstraint.activateConstraints(constraints)
Auto LayoutエンジンはConstraintsが追加削除されると都度レイアウトの計算を実行する。
Constraintsの追加削除ではなく、Constraintsの有効化を使う。
Recommended