LoginSignup
0
0

More than 5 years have passed since last update.

[iOS10] Today Extension (Widget)のハマりどころ (iPad)

Last updated at Posted at 2017-03-12

iOS10のToday Extension (Widget)を開発中にハマったところを書きます。

環境

OS: iOS10
デバイス: iPad (iPad Pro 12.9インチを除く)

ウィジェットの配置

iPadで画面をLandscapeにした時、ウィジェットを左列か右列に配置できます。

Simulator Screen Shot 2017.03.12 14.37.37.png

画面をPortraitにしたときは1列になります。
(iPad Pro 12.9インチを除く)

Simulator Screen Shot 2017.03.12 14.39.08.png

ハマりどころ

問題はウィジェットを右列に配置したときで、例えばLandscapeからPortraitに画面を回転したときは、ウィジェットの画面サイズが変化するのではなく、Landscape用ウィジェットが終了しつつ、Portrait用ウィジェットが起動します。

つ・ま・り、Landscapeで表示しているウィジェットとPortraitで表示しているウィジェットは別のインスタンスです。

注釈
  • ウィジェットを左列に配置したときは発生しません。
  • iPad Pro 12.9インチでは、ウィジェットが常に2列なので発生しません。
  • iPhone6Plus系の画面回転では発生しません。

ログ

LandscapeからPortraitにしたとき

Landscape 右列 Portrait
viewWillDisappear
viewDidLoad()
widgetActiveDisplayModeDidChange(_:withMaximumSize:)
widgetPerformUpdate(completionHandler:)
viewDidDisappear
viewWillAppear
deinit
viewDidAppear

問題

「画面の回転ではウィジェットの画面サイズが変わるだけ」という前提でコーディングすると、画面を回転したら初期値が表示される等の現象に見舞われます。

対策

viewWillDisappearでUserDefaultsなどにデータを保存し、もう1つのインスタンスがviewWillAppearで読み出すようにして、データを同期するようにします。
deinitでデータを保存していると、もう1つのインスタンスが既に起動しているので、データが同期できません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0