4

ページベースのアプリケーション用の Apple のデフォルト テンプレートを理解しようとしています。このテンプレートは、1 年の各月が 1 ページで構成される一種のカレンダーを示しています。

テンプレートを変更せずにコンパイルすると、奇妙なことに気付きました。アプリが起動すると、縦向きモードで表示されます。いくつかのページをめくった後 (たとえば、6 月まで)、回転を変更すると、横向きモードで再読み込みされ、2 つのページが表示されますが、1 月から始まります。ただし、これは一度だけ発生します。その後の向きの変更では、正しい「currentViewController」にジャンプします。

このコードは、具体的には RootViewController ファイルから来ているようです

UIViewController *currentViewController = self.pageViewController.viewControllers[0];

そして率直に言って、最初の向きの変更では無視されているようです。

なぜ理解しようとしていますか?

4

1 に答える 1

5

iPhone 5 に対応するようにアプリを更新するときに、同じ問題に対処する必要がありました。iOS 6 SDK でコンパイルすると、問題は iOS 6 で発生しますが、iOS 5 では発生しません。これは、PageViewController を横方向から入力した場合にのみ発生します。

回避策:

.m の @interface セクションに現在の状態を保存するプロパティを作成します。

@property (strong, nonatomic) NSArray *viewControllersSave;

viewController を次の場所に保存しますwillRotateToInterfaceOrientation

(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    // some code here...
    self.viewControllersSave = self.pageViewController.viewControllers;
}

の PageViewController プロパティの代わりに、保存されたプロパティを使用しますspineLocationForInterfaceOrientation

- (UIPageViewControllerSpineLocation)pageViewController: (UIPageViewController *)pageViewController
                   spineLocationForInterfaceOrientation: (UIInterfaceOrientation)orientation
{
   // some code
   NSArray *viewControllers = @[self.viewControllersSave[0]];
   [self.pageViewController setViewControllers:viewControllers
                            direction:UIPageViewControllerNavigationDirectionForward
                            animated:YES
                            completion:NULL];

return UIPageViewControllerSpineLocationMin;
}

これは問題を回避する可能性がありますが、後で使用するためにそのような回避策を回避するために、Apple にバグ レポートを送信する必要があります。

于 2013-01-17T09:09:18.443 に答える