SlideShare a Scribd company logo
1 of 20
Download to read offline
Animated APIを使って
スクロールで隠れる
あのバー を作る
自己紹介
• misoton - 海老原 圭吾
• Fringe81 フロントエンドエンジニア
• Scala・Elm・TypeScript
• UniposというプロダクトでReactNativeを使っています。
Animated API
アニメーションを扱うためのReactNative標準のAPI
Animated API
Animated.Value
ビュー
操作 参照
「10sで0から100に増加しなさい」 10sで0の位置から100の位置に移動
リストのスクロールと連動して上下に移動する
十分下にスクロールした後でも出現する
Twitter, Facebook, LINEでも採用されているUI
あのバー とは
Twitter画面のGIF
• ネイティブコードをできるだけ書かない。ネイティブのAPI
を自分で叩かないという開発方針。
• ネイティブコードが増えるとReactNativeのメリットが
薄くなる。
• 単純なものなら自分で書いて管理する方が安全。
• 外部ライブラリはいつメンテされなくなるかわからない。
• 明確なメリットがある場合は別。
ネイティブのAPIに用意されてないの?

ライブラリは使わないの?
あのバー を実現するために
1. リストのスクロールとバーの動きを連動させる。
→ スクロールイベントをAnimated.Valueにマップする。
2. スクロール位置に関係なく出現できる。
→ Animated.Valueを加工する。
  リストのスクロールとバーの動きを連動させる。
  スクロール位置に関係なく出現できる。
nativeEvent.contentOffset.y を animatedValue にマップ
現在のスクロール位置
イベントをAnimated.Valueにマッピングする関数
Animated.event(mapping, option)
現在のスクロール位置分だけ
View(あのバー)のY座標を移動させる
transform: [{translateY: hoge}] … hogeだけY座標を移動させる
✅ リストのスクロールとバーの動きを連動させる。
✅ リストのスクロールとバーの動きを連動させる。
  スクロール位置に関係なく出現できる。
スクロール位置
バーのY座標
バーのY座標 = スクロール位置
スクロールすればするほどバーは下にさがっていってしまう。
バーのY座標 = スクロール位置 -1
スクロール位置
バーのY座標
スクロールすればするほどバーは上にあがっていく。
指定した関係に従ってAnimated.Valueを別の値に変換する関数
animatedValue.interpolate(config)
inputRange = X座標
outputRange = Y座標
これでリストとバーが同じ方向にスクロールされるように
Toolbar
どのスクロール位置でも出現できるように
ここまでの処理では、バーはスクロールすれば
するほど上に上がっていく。
1000スクロールすると1000上にあがる。
これをバーが丁度隠れる位置で止めたい。
0
-バーの高さ
Animated.Valueの値を指定範囲内での変化に制限する関数
Animated.diffClamp(animatedValue, min, max)
min(-バーの高さ)からmax(0)までの変化に制限
↓
これでバーが画面のすぐ上で停止するように
✅ スクロール位置に関係なく出現できる。
✅ リストのスクロールとバーの動きを連動させる。
✅ スクロール位置に関係なく出現できる。
あのバー 完成!
完成だが…
• スクロールイベントの取得され方がiOS,Androidで微妙に
異なる。
• スクロール位置に従ってリスト自体をアニメーション
させる、など
• 上記を回避しようとするとプルダウン更新時のビューが見
えなくなってしまう。
• 一方が立つともう一方が立たず。妥協するか方法を捻出
するしかない。
まとめ
• AnimatedAPIには便利な関数が準備されており、単純な
アニメーションであればこれで簡単に対応できる。
• ただし、一歩踏み込んだ処理をする時にはiOS,Androidの
差異やReactNativeのクセを意識せざるを得ない状況が
やはりあるのでご注意。
• あのバー の正式名称を知っている方は教えてください…

More Related Content

What's hot

大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
Mori Shingo
 
Webサイト向けAPI #twtr_hack
Webサイト向けAPI #twtr_hackWebサイト向けAPI #twtr_hack
Webサイト向けAPI #twtr_hack
Yusuke Yamamoto
 

What's hot (13)

SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
 
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
 
Lt 20150711
Lt 20150711Lt 20150711
Lt 20150711
 
ヤマムギVol.1 Opening
ヤマムギVol.1 OpeningヤマムギVol.1 Opening
ヤマムギVol.1 Opening
 
AWA with Realm
AWA with RealmAWA with Realm
AWA with Realm
 
ヤマムギ vol.1 kintone 入門ハンズオン
ヤマムギ vol.1 kintone 入門ハンズオンヤマムギ vol.1 kintone 入門ハンズオン
ヤマムギ vol.1 kintone 入門ハンズオン
 
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
 
Webサイト向けAPI #twtr_hack
Webサイト向けAPI #twtr_hackWebサイト向けAPI #twtr_hack
Webサイト向けAPI #twtr_hack
 
デザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまでデザイナさんにGithubでpr投げてもらうまで
デザイナさんにGithubでpr投げてもらうまで
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
アラカンエンジニアがたどり着いた生き方
アラカンエンジニアがたどり着いた生き方アラカンエンジニアがたどり着いた生き方
アラカンエンジニアがたどり着いた生き方
 
Swiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒すSwiftのプロパティオブザーバを使い倒す
Swiftのプロパティオブザーバを使い倒す
 
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶおっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
 

Similar to Animated APIを使ってスクロールで隠れる“あのバー”を作る

ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
Kentaro Matsumae
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
CData Software Japan
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
 

Similar to Animated APIを使ってスクロールで隠れる“あのバー”を作る (16)

WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったことWatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
 
Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2Swiftビギナーズ倶楽部 vol.2
Swiftビギナーズ倶楽部 vol.2
 
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
 
Swift Study Vol.4
Swift Study Vol.4Swift Study Vol.4
Swift Study Vol.4
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
第二回Android training4desinger 2
第二回Android training4desinger 2第二回Android training4desinger 2
第二回Android training4desinger 2
 
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
ANSIBLE_KEEP_REMOTE_FILESをTrueにしてみよう!
 
Twitter Profile Header Animation by using Swift
Twitter Profile Header Animation by using SwiftTwitter Profile Header Animation by using Swift
Twitter Profile Header Animation by using Swift
 
Api設計
Api設計Api設計
Api設計
 
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
 
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 
Swift for pose-estimation
Swift for pose-estimationSwift for pose-estimation
Swift for pose-estimation
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
 
iPhoneアプリ用のAPI サーバを少し早くした話
iPhoneアプリ用のAPI サーバを少し早くした話iPhoneアプリ用のAPI サーバを少し早くした話
iPhoneアプリ用のAPI サーバを少し早くした話
 

Animated APIを使ってスクロールで隠れる“あのバー”を作る