Mais conteúdo relacionado
Semelhante a できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版) (19)
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
- 2. 自己紹介
・酒井 文也 (Fumiya Sakai)
・ever sense. inc App Engineer
・Designer → ServerSide Engineer → AppDeveloper
Accounts
・Facebook: https://www.facebook.com/fumiya.sakai.37
・Twitter: https://twitter.com/fumiyasac
・Github: https://github.com/fumiyasac
・Qiita: https://qiita.com/fumiyasac@github
Who are you?
Library (Personal)
Products (ever sense. inc)
下記2つの新規アプリの立ち上げ(iOS側)に携わっ
ています。現在も継続して運用中です。
- 8. 【Chapter2】UIScrollView & UIStackViewの構成
部品として切り出したUIViewの配置とAutoLayoutの制約に関するもの
(1) ContainerViewの高さをContainerViewにつな
がれているViewControllerのプロパティにする
UIStackViewを内包した
UIScrollView
<高さが可変するViewへの制約>
2番目のコンテンツ
(ContainerView)
高さが可変するView
高さが可変するView
+
セル高さが可変する
UITableViewを設置
Notificationを送信
して高さを調節する
height ≧ 0
priority = 1000
height = ●●
priority = 250
<StackView内のContainerViewへの制約>
UIView
UIView
ContainerView
(2) ViewControllerにNotificationを設定しておく
(3) viewDidLayoutSubviewsでtableViewの内部
コンテンツ高さとtableViewの高さを合わせる
(4) viewDidAppearでNotificationを送信する
- 11. 【Chapter4】補足資料:挙動に関するイメージ
動きの概要
y < 0 y > 0 ScrollViewDidScrollで制約を更新する
コードでConstraintを加えて、引数を
UIScrollViewとする、
「setParallaxEffectToHeaderView」
で制約を更新して動きを出す。
全体の流れと解説
(1) NavigationBarに内包するヘッダー
クラス名: GradientHeaderView.swift
(2) 画像を表示するヘッダー
クラス名: ArticleHeaderView.swift
記事を表示するために下へスクロールすると画像が隠れる
タイミングに合わせてNavigationBarが出現する。
y = 0
背景のアルファとダミーヘッダーの上方向の
制約を、
「setHeaderNavigationTopConstraint」
で更新して動きを出す。
- 15. 【Chapter9】 カスタムトランジションと左端のスワイプで画面遷移をする
3D回転の動きをカスタムトランジションはCATransform3Dを利用して作成する
<このアニメーションの実装にあたり>
(2) 90° (π/2) 回転するように設定
var perspectiveTransform = CATransform3DIdentity
perspectiveTransform.m34 = -0.002
containerView.layer.sublayerTransform =
perspectiveTransform
(1) 適用するパースペクティブの設定をする
Present
Dismiss
SwipeでDismissする
Flip
Animation
snapshotView.layer.transform =
CATransform3DMakeRotation(CGFloat(Double.pi /
2), 0.0, 1.0, 0.0)
※ containerViewやsnapshotViewの位置関係と回転
� アニメーションをうまく利用して遷移を実行する。
UIPercentDrivenInteractiveTransitionを継承したクラスを、
Dismissのスワイプ時にだけ適用する。
- 18. 【補足3】View - Model - PresenterパターンとUI
データとViewとの繋がりをできるだけパターン化して整理する
ViewController Presenter Model
データ構造の定義UI表示とデータ取得の仲介データを伴うUIの表示
API通信を伴う部分は、
SwiftyJSONを利用して初期化
→ データ構造の作成
※APIでの非同期通信
Alamofireをラッピングした
APIRequestManager.swiftを利用
(1) ViewController側で実行する
プロトコルの定義
(2) Modelの形に則ったデータの
作成やAPI通信のハンドリング
Presenter側で定義した
プロトコルの具体的な実装をする
データを取得 → UIの更新
の流れをつくる
Viewとデータの関係を密接にする