3

iOS 6 用のアプリの開発を開始し、そこで動作するようになりました。今は、iOS 5.1 もサポートしていることを確認して、iPad 1 で動作するようにする必要があります。 iOS 5 では、iOS 6 での簡単さに比べて、苦痛を感じます。私には解決できない問題が 1 つあります。

以下に開始画面レイアウトを示します。[実行] ボタンを押すと、別のビュー コントローラーがモーダルで全画面表示されます。これは、実行ボタンが親ビュー コントローラーで呼び出すコードです。

- (void)performButtonPressed:(UIImage *)notationImage {
    self.performViewController = [[YHPerformViewController alloc] initWithImage:notationImage
                                                               recordingService:self.performanceRecordingService];

    self.performViewController.modalPresentationStyle = UIModalPresentationFullScreen;
    self.performViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:self.performViewController animated:YES completion:^{
        [self.performViewController startPerformance];
    }];
}

iOS 6 ではこれで問題ありません。iOS 5 では、すべての適切なコードが呼び出されているようです。

  • 提示されているView ControllerのloadView
  • shouldAutorotateToInterfaceOrientation - YES を返す
  • 私の「startPerformance」メソッドが呼び出され、そのことを行います

ただし、ビューは実際には画面に表示されず、階層の上位にあるビュー コントローラーに関連付けられているすべてのビュー (上部の図形とナビゲーション コントロール) は画面に表示されたままになります。現在のビュー コントローラーのビューのみがフェードアウトします。さらに奇妙なのは、トランジション中にこのビューが 90 度回転してフェードアウトすることです。以下に画面キャプチャを含めました。modalPresentationStyle を UIModalPresentationFormSheet に変更すると、フルサイズのビューが収まらないという予想される問題とは別に動作します。

何かご意見は?

開始レイアウト: 画面レイアウトの開始

遷移中のサブビューの奇妙な回転。また、1 つのビューだけでなく、画面全体がフェードアウトする必要があります。 遷移中のサブビューの奇妙な回転

何が起こると予想され、iOS 6 で行われるか。 iOS 6 で予想されることと実行すること

4

2 に答える 2

2

この問題を解決するハックを思いつきました。でも本当の解決策を見つけたいです。

私の困った解決策は、modalPresentationStyle を UIModalPresentationFormSheet に変更することです。次に、UIModalPresentationFormSheet のサイズを変更する方法で説明されているハックのバリエーションを使用します。フォームシートを目的のサイズにします。

- (void)performButtonPressed:(UIImage *)notationImage {
    self.performViewController = [[YHPerformViewController alloc] initWithImage:notationImage
                                                               recordingService:self.performanceRecordingService];

    // This is a bit of a hack. We really want a full screen presentation, but this isn't working under iOS 5.
    // Therefore we are using a form sheet presentation and then forcing it to the right size.
    self.performViewController.modalPresentationStyle = UIModalPresentationFormSheet;
    self.performViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:self.performViewController animated:YES completion:^{
        [self.performViewController startPerformance];
    }];
    self.performViewController.view.superview.bounds = self.performViewController.preferredBounds;
}

これには、View Controller が「preferredBounds」プロパティに提示され、これが loadView メソッドに含まれている必要があります。

- (void)loadView {

    … // Usual loadView contents

    // Part of the hack to have this view display sized correctly when it is presented as a form sheet
    self.preferredBounds = self.view.bounds;
}
于 2013-03-08T13:18:35.507 に答える
-1

[self presentViewController:self.performViewController animated:YES completion:nil] iOS 6 以降のバージョンでのみ動作します。

で使用する必要があり[self presentModalViewController:controller animated:YES];ます

于 2013-03-08T12:31:26.900 に答える