SlideShare una empresa de Scribd logo
1 de 55
Descargar para leer sin conexión
Swift Study vol.4
Created by Nagamine Hiromasa @web_chiro
Swift 勉強会
iOSアプリを開発してみたい
Swiftってどういうもの?
など、Swiftに興味を持っている人向けに
勉強会を開いています。
今日の目標
アニメーションがどう実現されるのかを知る
アニメーションを実装できるようになる
複数のアニメーションやジェスチャーを使ってバリエーショ
ンを増やす
iOSアニメーションについて
アニメーションはどういうところで使われているのか
Animation Tutorial
Loading, Progress
メニューリスト
画面の遷移
ゲーム
Agenda
1. 基本的なアニメーション
2. UIKitアニメーション
3. CoreAnimation
4. Gestureを組み合わせる
5. まとめ
必要な物
1. Mac
2. Xcode 6.3.1
3. インターネット環境
1. 基本的なアニメーション
今回は基本的なアニメーションとして
4つのアニメーションを中心にやっていきます
拡大・縮小・消失・移動
アニメーションを実装する方法
アニメーションを実装する方法はいくつかありますが
UIKitのクラスメソッドを使う方法がとても簡単です。
2. UIKitアニメーション
UIKitにデフォルトで提供されるアニメーション機構
拡大・縮小・回転・移動などを簡単・直感的に実装できる
アニメーションを実装する方法
UIKitには次のようなクラスメソッドが定義されています。
// アニメーションだけを行うメソッド
UIView.animationWithDuration:animation:
// アニメーションを実行した後の処理も記述できるメソッド
UIView.animationWithDuration:animation:completionBlock:
どれくらいの時間(duration)で
どのようなアニメーション(animation)を実行し
終わった後に最後の処理(completionBlock)を実行する
Example
  // あらかじめ変化前の状態を設定しておく (from)
// 100 x 100 のビューを生成
var _animationView:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
// ビューの色を青に設定
_animationView.backgroundColor = UIColor.blueColor()
self.view.addSubview(_animationView)
// アニメーション
UIView.animateWithDuration(1.0, animations: { () -> Void in
// ここにアニメーションの変化後の状態を設定する (to)
// 200x200のサイズにアニメーションさせる
_animationView.frame.size = CGSizeMake(200, 200)
}){ (isTrue) -> Void in
拡大・縮小
// 100 x 100 のビューを生成
var _animationView:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
// ビューの色を青に設定
_animationView.backgroundColor = UIColor.blueColor()
self.view.addSubview(_animationView)
// アニメーション
UIView.animateWithDuration(1.0, animations: { () -> Void in
// 横幅を2倍に設定
_animationView.frame.size.width = 200
// 高さを2倍に設定
_animationView.frame.size.height = 200
}){ (isTrue) -> Void in
// アニメーションビューの初期化
拡大・縮小
消失
// 100 x 100 のビューを生成
var _animationView:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
// ビューの色を青に設定
_animationView.backgroundColor = UIColor.blueColor()
self.view.addSubview(_animationView)
// アニメーション
UIView.animateWithDuration(1.0, animations: { () -> Void in
// ビューを透明に
_animationView.alpha = 0.0
}){ (isTrue) -> Void in
// アニメーションビューの初期化
// 親ビューからビューを削除 (add <-> remove)
_animationView.removeFromSuperview()
消失
移動
// 100 x 100 のビューを生成
var _animationView:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100))
// ビューの色を青に設定
_animationView.backgroundColor = UIColor.blueColor()
self.view.addSubview(_animationView)
// アニメーション
UIView.animateWithDuration(1.0, animations: { () -> Void in
// ビューを左端から右端に移動
var dx = self.view.frame.width - animationAreaWidth
_animationView.frame.origin = CGPointMake(dx, 0)
}){ (isTrue) -> Void in
// アニメーションビューの初期化
self.configureAnimationView()
移動
アフィン変換
回転や上下反転するアニメーションは
アフィン変換(CGAffineTransformクラス)を利用します
CGAffineTransformScale (倍加)
CGAffineTransformRotate (回転)
CGAffineTransformInvert (上下反転)
CGAffineTransformConcat (組み合わせ)
CGAffineTransformTranslate (移動量)
回転
// アニメーション
UIView.animateWithDuration(1.0, animations: { () -> Void in
// 180度回転するtransformの生成// 180度回転するtransformの生成
// * 回転角度(radian)を生成する関数(120度の場合): self.DegreesToRadians(120)
// * RotateTransformの生成: CGAffineTransformMakeRotation(radian)
var radian = self.DegreesToRadians(180.0)
var transform = CGAffineTransformMakeRotation(radian)
// animationViewにtransformを設定
self.animationView.transform = transform
}){ (isTrue) -> Void in
// アニメーションビューの初期化
self.configureAnimationView()
}
ラジアン
func DegreesToRadians(var degree:Double) -> CGFloat
{
return CGFloat(degree * M_PI / 180.0)
}
回転
SAMPLE
拡大
-Large Sample Answer
回転
-Rotate Sample Answer
3. CoreAnimation
UIViewのメソッドでできるアニメーションには限界があります。
CoreAnimationは、より多くのアニメーションを演出できます。
消失・拡大・縮小・移動・変形・回転
メリット
UIKitのアニメーションでは扱えないプロパティやベジェを
使ったアニメーションができるなど、カスタム性が高いです。
ベジェ
カスタマイズ性が高い
動作が軽い
CABasicAnimationクラス
CoreAnimationクラスの中で最も基礎的なクラスです。
今回はこのクラスを使っていきます。
以下のような値を設定します
変化させるプロパティの前後
IntervalやDelay設定
アニメーション方法
etc..
Example
例えば、ビューの角丸サイズを変える
アニメーションはこのような感じです。
// cornerRadiusを変更するアニメーション
var cornerRadiusAnimation = CABasicAnimation(keyPath: "cornerRadius")
// cornerRadius を 0 -> 100 に変化させるよう設定
cornerRadiusAnimation.fromValue = 0
cornerRadiusAnimation.toValue = 100
// アニメーション
cornerRadiusAnimation.duration = 2.0
// アニメーションが終了した時の状態を維持する
cornerRadiusAnimation.removedOnCompletion = false
cornerRadiusAnimation.fillMode = kCAFillModeForwards
// アニメーションが終了したらanimationDidStopを呼び出す
cornerRadiusAnimation.delegate = self
角丸
角丸を変えるアニメーションはLayerプロパティを使用します。
Layerプロパティの変化はUIKitアニメーションではできません。
参考資料
SwiftでアニメーションCoreAnimation編- Qiita
課題1- 初級
Large・Small・Delete・Moveボタンを使って
拡大・縮小・消失・移動するアニメーションを実装しましょう
Easy Templete
課題1- 中級
Rotateアニメーションを使ってそれぞれの
アニメーションに180度回転を組み合わせてみましょう
課題1- 上級
以下のような連続アニメーションを実装してみましょう。
一部CoreAnimationを利用しています。
前回使った資料
Swift勉強会vol.1 資料
Qiita - Swiftでビューを操作する
解答
課題1 初級
課題1 中級
4. ジェスチャーを使ったアニメーション
ジェスチャーとは?
ジェスチャーを実装するには
UIGestureのパターン
ジェスチャーとアニメーションを組み合わせる
ジェスチャーとは?
画像を拡大、ゲームでアイテムをタップするときの指の動き
指の動きに対して、対応するジェスチャーがある
Viewにジェスチャーをするとイベントが発生する
ジェスチャーを実装するには
処理の流れ
ジェスチャーの追加
スワイプ用のジェスチャーを生成します。
Selectorクラスを使って呼び出すメソッドを指定します。
// スワイプジェスチャーの生成。ジェスチャーイベント発生時に"callSwipeLeftAnimation"関数をコール
var swipeGestureRecognizerLeft = UISwipeGestureRecognizer(target: self, action:
// 左方向のスワイプを設定する
swipeGestureRecognizerLeft.direction = .Left
// rectビューにスワイプジェスチャーを追加
rect.addGestureRecognizer(swipeGestureRecognizerLeft)
ジェスチャーアクションの追加
スワイプすると発生する処理をViewControllerに実装します
ここでは、"leftSwipeGesture"というメソッドを定義します
func leftSwipeGesture(){
// rectビューの中心が(100, 100)の位置になるようにビューを移動する
self.rect.center = CGPointMake(100, 100)
}
ジェスチャーの種類
Tap
Pan
Pinch
Rotate
Swipe
LongPress
資料
Qiita - Swiftでジェスチャーの追加
GitHub - Gesture Sample Basic
課題2- 初級
ジェスチャーに従って、左右に移動する
アニメーションを実装してみましょうEasy Templete
課題2- 中級
ジェスチャーに従って移4方向に動するアニメーションです
違う方向に遷移しないよう実装しましょう
Middle Templete
課題2- 中級
ジェスチャーに従って移4方向に動するアニメーションです
違う方向に遷移しないよう実装しましょう
Hard Templete
解答
課題2 初級
課題2 中級
まとめ
少し告知
イベント
Swift もくもく会vol.4
Swift勉強会vol.5
今後、開催を予定しています
グループ
Swift頑張る会(Facebook)
Swift勉強会(Connpass)
現在2つグループがあります!
興味があったら参加してみてください!
勉強会資料
過去:
今回:
Swift勉強会資料
Swift勉強会vol.4
これで、 は終了です。
ご参加有難うございました。
Swift勉強会vol.4

Más contenido relacionado

Similar a Swift Study Vol.4

Leap Motion を用いた数学教材開発の例
Leap Motion を用いた数学教材開発の例Leap Motion を用いた数学教材開発の例
Leap Motion を用いた数学教材開発の例Yukinori KITADAI
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説Hideki Akiba
 
OpenCVで作るスタンプAR
OpenCVで作るスタンプAROpenCVで作るスタンプAR
OpenCVで作るスタンプARTakashi Yoshinaga
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift PlaygroundsへKinkumaDesign
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in FukuokaShinobu Izumi
 
UnityとBlenderハンズオン第10章
UnityとBlenderハンズオン第10章UnityとBlenderハンズオン第10章
UnityとBlenderハンズオン第10章yaju88
 
Meetup tokyo.20120924
Meetup tokyo.20120924Meetup tokyo.20120924
Meetup tokyo.20120924Kosuke Isobe
 
position: fixed;を上手に飼う方法
position: fixed;を上手に飼う方法position: fixed;を上手に飼う方法
position: fixed;を上手に飼う方法石橋 啓太
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門cch-robo
 
Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見たOCHI Shuji
 
FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するKeisukeKiriyama
 
Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2mganeko
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。ssusere75907
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようHiroaki Wakamatsu
 
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみようAI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみようTakashi Yoshinaga
 
20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れるKenji Wada
 
I phonedevws20121028ci filter
I phonedevws20121028ci filterI phonedevws20121028ci filter
I phonedevws20121028ci filterZuQ9Nn
 
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 Fumiya Sakai
 

Similar a Swift Study Vol.4 (20)

Leap Motion を用いた数学教材開発の例
Leap Motion を用いた数学教材開発の例Leap Motion を用いた数学教材開発の例
Leap Motion を用いた数学教材開発の例
 
HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説HTML5 APIを使ったデモとソースの解説
HTML5 APIを使ったデモとソースの解説
 
Hands on
Hands onHands on
Hands on
 
OpenCVで作るスタンプAR
OpenCVで作るスタンプAROpenCVで作るスタンプAR
OpenCVで作るスタンプAR
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへ
 
Unityの夕べ in Fukuoka
Unityの夕べ in FukuokaUnityの夕べ in Fukuoka
Unityの夕べ in Fukuoka
 
UnityとBlenderハンズオン第10章
UnityとBlenderハンズオン第10章UnityとBlenderハンズオン第10章
UnityとBlenderハンズオン第10章
 
Meetup tokyo.20120924
Meetup tokyo.20120924Meetup tokyo.20120924
Meetup tokyo.20120924
 
position: fixed;を上手に飼う方法
position: fixed;を上手に飼う方法position: fixed;を上手に飼う方法
position: fixed;を上手に飼う方法
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
 
Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見た
 
Coordinator Layout Behavior
Coordinator Layout BehaviorCoordinator Layout Behavior
Coordinator Layout Behavior
 
FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解する
 
Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2Inside of 聖徳玉子 by O2
Inside of 聖徳玉子 by O2
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
 
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみようJavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
 
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみようAI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
AI x OpenCV x WebAR: Selfie Segmentationを使ってみよう
 
20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる
 
I phonedevws20121028ci filter
I phonedevws20121028ci filterI phonedevws20121028ci filter
I phonedevws20121028ci filter
 
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
 

Swift Study Vol.4