On iOS, orientation changes don't animate in a way that "looks native"
まだ誰も着手していません。
- 主要言語
- C++
- スター
- 127k
- フォーク
- 25.3k
- 平均マージ
- 1日 23時間
- マージ済み PR(30日)
- 4
説明
Is this a bug report?
Yes
Have you read the Contributing Guidelines?
Yes
Environment
Environment:
OS: macOS Sierra 10.12.6
Node: 8.4.0
Yarn: 1.0.1
npm: 5.4.1
Watchman: 4.5.0
Xcode: Xcode 8.3.3 Build version 8E3004b
Android Studio: 2.3 AI-162.3934792
Packages: (wanted => installed)
react: 16.0.0-alpha.12 => 16.0.0-alpha.12
react-native: 0.48.3 => 0.48.3
Steps to Reproduce
- Create a react native app w/ react native init
- Run it on an iOS device or the iOS simulator
- (If on a simulator) Turn on slow animations (CMD+T) so the issue will be more obvious.
- Rotate the device a few times to landscape and portrait
- Observe that immediately after the orientation changes, the view is resized to the dimensions of the new orientation, and THEN the rotation animation begins. The view's contents and dimensions are not smoothly resized while the view is being rotated.
Expected Behavior
In a regular native iOS app, when the orientation of the device changes, the view's contents and dimensions smoothly resize while the view is also rotated at the same time.
Here is a animated gif. This is a simple native app written in swift, see how the view resizes and rotates smoothly (at the same time) on orientation changes:

Actual Behavior
On orientation changes, the view's dimensions and contents are resized once at the very beginning of the change, and then the rotation animation happens.
Here is another animated git. This is a simple RN app, with a red border applied to the view so you can see how the view's dimensions are immediately changed (not smoothly animated).

Reproducible Demo
Sadly I can't seem to get the expo app to handle rotations so I guess having a Snack wouldn't be useful.
But you can see if yourself pretty easily if you:
- Use
react-native initto create a new app - Edit
index.ios.jsand add to the container's styles (line ~40):
borderColor: 'red',
borderWidth: 10,
- Then run it, turn on slow animations in the simulator (CMD+T), and change the orientation a few times.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
index.ios.jsを使用するReact Nativeアプリで動作を再現し、40行目付近に記載されたボーダースタイルを追加して、シミュレータの低速アニメーションを有効にします。その後、関連するiOSの向き変更処理を追跡します。回転中にビューの内容とサイズが滑らかにリサイズされ、ネイティブiOSの動作と一致すれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- ios, react-native
- 領域
- mobile
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100