SlideShare a Scribd company logo
1 of 10
Download to read offline
Swift :
AutoLayoutでUIVisualEffectView
をアニメーションさせてみた
iOS_LT #16
@Tomoya_Onishi
自己紹介
• iOS開発歴約3年
• ツイート専用アプリ「FasPos」
• QRコード読み取りアプリ「QR Reader」
• その他位置情報ログアプリなどいくつか
UIVisualEffectView
• iOS8で登場した
• さまざまなエフェクトを適応したビューを簡単に生成できる
• Apple公式のすりガラス表現ができる!!!!
• どういうエフェクトにするかはUIVisualEffectで指定する
UIVisualEffect
• サブクラスのUIBlurEffect, UIVibrancyEffectが利用できる
• BlurEffectは3つのスタイルが用意されている
enum UIBlurEffectStyle : Int {
case ExtraLight
case Light
case Dark
}
let effect = UIBlurEffect(style: UIBlurEffectStyle.Light)
!
let effectView: UIVisualEffectView = UIVisualEffectView(effect: effect)
!
view.addSubview(effectView)
これだけのコードですりガラス表現のビューが表示できる
AutoLayoutを使ってコントロールセンター
みたいなアニメーションを再現してみる
// View
let effect = UIBlurEffect(style: UIBlurEffectStyle.Light)
let effectView: UIVisualEffectView = UIVisualEffectView(effect: effect)
effectView.clipsToBounds = false
// falseにすると AutoResizingMaskをAutoLayoutの制約に自動変換しないようになる
effectView.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(effectView)
// AutoLayout
// NSDictionaryOfVariableBindings関数はどこにいったのかよくわからないので自分で辞書を生成
let views = ["effectView" : effectView]
let metrics = ["marginZero" : 0, "marginTop" : 100]
// 水平方向の制約を追加:superviewに対してぴったり張り付く
let horizontalConstraints: AnyObject[] =
NSLayoutConstraint.constraintsWithVisualFormat("|-marginZero-[effectView]-marginZero-|",
options: NSLayoutFormatOptions(0),
metrics: metrics,
views: views)
view.addConstraints(horizontalConstraints)
// 垂直方向の制約を追加:superviewに対して上は100ptあける、下はぴったり張り付く
let verticalConstraints: AnyObject[] =
NSLayoutConstraint.constraintsWithVisualFormat("V:|-marginTop-[effectView]-marginZero-|",
options: NSLayoutFormatOptions(0),
metrics: metrics,
views: views)
view.addConstraints(verticalConstraints)
// アニメーションのために上からの制約を保持
let constraint : AnyObject = verticalConstraints[0]
marginTopConstraint = constraint as? NSLayoutConstraint
var flag : Bool = false
@IBAction func didTapButton(sender: UIButton) {
if let constraint = marginTopConstraint {
UIView.animateWithDuration(1.0,
delay: 0.0,
usingSpringWithDamping: 0.5,
initialSpringVelocity: 0.1,
options: UIViewAnimationOptions(0),
animations: {
// frameのアニメーションと同じ考えだとアニメーションできない
// constantを変更するだけでは足りない
constraint.constant = self.flag ? 150 : 500
// 画面の再描画を呼び出す必要あり
self.view.layoutIfNeeded()
},
completion: nil)
flag = !flag
}
}
まとめ
• UIImage+ImageEffectsを置き換えられる
• アニメーションがおかしくなる
• storyboardもframeに頼らない作りになったので、基本的にはAutoLayout管理に
移行すべき(3.5, 4inch, iPad, resizable, カーナビ, iPhone iPadのStoryboardの
共有化, 通知センターのウィジェット)

More Related Content

Viewers also liked

Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー大介 束田
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数Taketo Sano
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 

Viewers also liked (6)

Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
 
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
 
App dojo-2014-03-27
App dojo-2014-03-27App dojo-2014-03-27
App dojo-2014-03-27
 

Recently uploaded

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Swift: AutoLayoutでUIVisualEffectviewをアニメーションさせてみた

  • 2. 自己紹介 • iOS開発歴約3年 • ツイート専用アプリ「FasPos」 • QRコード読み取りアプリ「QR Reader」 • その他位置情報ログアプリなどいくつか
  • 3. UIVisualEffectView • iOS8で登場した • さまざまなエフェクトを適応したビューを簡単に生成できる • Apple公式のすりガラス表現ができる!!!! • どういうエフェクトにするかはUIVisualEffectで指定する
  • 4. UIVisualEffect • サブクラスのUIBlurEffect, UIVibrancyEffectが利用できる • BlurEffectは3つのスタイルが用意されている enum UIBlurEffectStyle : Int { case ExtraLight case Light case Dark }
  • 5. let effect = UIBlurEffect(style: UIBlurEffectStyle.Light) ! let effectView: UIVisualEffectView = UIVisualEffectView(effect: effect) ! view.addSubview(effectView) これだけのコードですりガラス表現のビューが表示できる
  • 6.
  • 8. // View let effect = UIBlurEffect(style: UIBlurEffectStyle.Light) let effectView: UIVisualEffectView = UIVisualEffectView(effect: effect) effectView.clipsToBounds = false // falseにすると AutoResizingMaskをAutoLayoutの制約に自動変換しないようになる effectView.setTranslatesAutoresizingMaskIntoConstraints(false) view.addSubview(effectView) // AutoLayout // NSDictionaryOfVariableBindings関数はどこにいったのかよくわからないので自分で辞書を生成 let views = ["effectView" : effectView] let metrics = ["marginZero" : 0, "marginTop" : 100] // 水平方向の制約を追加:superviewに対してぴったり張り付く let horizontalConstraints: AnyObject[] = NSLayoutConstraint.constraintsWithVisualFormat("|-marginZero-[effectView]-marginZero-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: views) view.addConstraints(horizontalConstraints) // 垂直方向の制約を追加:superviewに対して上は100ptあける、下はぴったり張り付く let verticalConstraints: AnyObject[] = NSLayoutConstraint.constraintsWithVisualFormat("V:|-marginTop-[effectView]-marginZero-|", options: NSLayoutFormatOptions(0), metrics: metrics, views: views) view.addConstraints(verticalConstraints) // アニメーションのために上からの制約を保持 let constraint : AnyObject = verticalConstraints[0] marginTopConstraint = constraint as? NSLayoutConstraint
  • 9. var flag : Bool = false @IBAction func didTapButton(sender: UIButton) { if let constraint = marginTopConstraint { UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.1, options: UIViewAnimationOptions(0), animations: { // frameのアニメーションと同じ考えだとアニメーションできない // constantを変更するだけでは足りない constraint.constant = self.flag ? 150 : 500 // 画面の再描画を呼び出す必要あり self.view.layoutIfNeeded() }, completion: nil) flag = !flag } }
  • 10. まとめ • UIImage+ImageEffectsを置き換えられる • アニメーションがおかしくなる • storyboardもframeに頼らない作りになったので、基本的にはAutoLayout管理に 移行すべき(3.5, 4inch, iPad, resizable, カーナビ, iPhone iPadのStoryboardの 共有化, 通知センターのウィジェット)