2

iOS デバイスの向きが変わったときに特定のビューがどのように回転するかについて、少し質問があります。

私は現在アプリを開発していますが、基本的には 2 つのビュー コントローラーで構成されています。

私の UINavigationController ビューでは、デバイスが回転すると、UINavigationBar と UIToolbar の両方が横方向の寸法に移行するときにクロスフェード アニメーションを実行することに気付きました。

私のアプリのホーム画面。 デバイスが回転すると、UINavigationController 要素がクロスフェードします。

技術的な理由から、カスタム ビュー コントローラーに UINavigationController を使用しませんでしたが、UINavigationBar と UIToolbar を同じ場所に手動で追加しました (基本的に、これらの要素を背景の上に重ねることができるようにする必要があるためです)。オプションで非表示にすることができ、それを直接制御したかったためです)。

ただし、カスタム ビュー コントローラーが表示されているときにデバイスを回転させると、2 つのバーがクロスフェード トランジションを実行しません。代わりに、すべてのサブビューがスライドし (少しカオスに見えます)、アニメーションが実際に開始される前に背景画像が iPhone の横向きバージョンにすぐに切り替わるため、背景画像がゆがみます (つまり、アニメーション内の 32pt の高さのアートワークをタイリングすることから開始します高さ 44pt の UIToolbar)。

デバイスの向きが変わったときに、Apple が実際に特定の UIView に対してこのクロスフェード ブレンディング エフェクトを作成する方法を知っている人はいますか?

4

2 に答える 2

3

ビューを回転させるネイティブの自動回転を使用しないでください。手動で回転させます。ここで 2 番目の回答を見てください: http://stackoverflow.com/questions/1220580/iphone-dev-manually-rotate-view 。基本的に、デバイスのローテーション通知にサインアップし、ビューのローテーションを自分で行います。

上記のリンクで指定された UIView animate ブロックに加えて、2 つのビューをクロスフェードする場合は、次のようにします。

[UIView transitionWithView:superViewOfButtonView duration:2.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    [thebuttonViewIWantToCrossFade setFrame:newPositionRect];
}completion:^(BOOL finished){
    //any completion code   
}];

これがうまくいくかどうか教えてください!

于 2012-08-23T04:52:50.493 に答える
1

私は実際に戻ってきて、これを再調査しました。UIView と CAAnimation のトランジション メソッドは実際に機能しますが、iOS デバイスごとにそれぞれのフレームレートが大きく異なるため、それらを実装することが最善の解決策だとは思いませんでした。

私はついに思い切って Apple Developer Relations に連絡し、直接尋ねました (ご存知ない場合は、各 Mac/iOS 開発者がこれらの人たちに毎年 2 つの質問を無料で行うことができます!)。

彼らはすぐに返信し、何人かの Apple エンジニアが WWDC 2012 でまさにそのトピックに関する講演を実際に行ったことを私に知らせました.

この講演は録画されており、登録済みの Apple 開発者は、iTunes で「インターフェイスのローテーションを磨く」というタイトルで視聴できます。インターフェイスの向きを処理するさまざまな方法について説明しており、一見の価値があります。:)

これも役立つことを願っています!

于 2013-01-16T14:03:43.297 に答える