デバイス/インターフェイスが縦向きモードのときに、UIView が横向きモードで持つフレームを取得することは可能ですか? もしそうなら、これはどのように行われますか?
3 に答える
MrThys、ポートレートモードまたはランドスケープモードのいずれかで、ビューがどのようになるかを知っておく必要があります。その後、次のような定数として定義できます。
#define myViewPortrait CGRectMake(0.0f, 0.0f, 768.0f,1024.0f)
#define myViewLandscape CGRectMake(0.0f, 0.0f, 1024.0f,768.0f)
その後、デバイスの向きが変わるときにこれらの値を使用できます。:)
これを行うための信頼できる方法がわかりません。私のプロジェクトの 1 つで、私が使用しUIApplicationWillChangeStatusBarOrientationNotification
た . frame
ビューのいずれかまたはプロパティをクエリするbounds
と、ビューが別のビューでカバーされているかどうかによって、一貫性のない結果が返されます (他の混乱するケースもある可能性があります)。willRotateToInterfaceOrientation:
メソッド内で状況が違うのかもしれません。
私の場合、ビューの境界を見つけるために独自のメソッドを実装することになりました。
- (CGSize)currentViewSizeWithOrientation:(UIInterfaceOrientation)orient
{
CGSize size = self.currentView.bounds.size;
CGSize result;
if (UIInterfaceOrientationIsPortrait(orient))
result = CGSizeMake(fminf(size.width, size.height),
fmaxf(size.width, size.height));
else
result = CGSizeMake(fmaxf(size.width, size.height),
fminf(size.width, size.height));
return result;
}
あなたの場合、Nibからロードされたら、ビューフレームを見つけようとすることができます。次に、横向きのフレームを推測するか、Interface Builder でフレームを明示的に設定し、両方の向きのコードで複製します。
あまり。画面の寸法は、幅と高さが入れ替わるだけです。ただし、ステータスバーが表示されている場合、使用可能な領域は異なります (たとえば、iPhone の縦向きの 320x460 と横向きの 300x480)。UINavigationController などを使用している場合は、クロムを考慮する必要があります。ビューがコンテナー ビュー コントローラー内のビュー コントローラーの最上位ビューでない場合は、さまざまな自動サイズ変更マスクとカスタム レイアウト コードも考慮する必要があります。
なぜこれが必要なのですか?一般に、UIViewControllerwillRotateToInterfaceOrientation:duration:
または UIViewで指定されたサイズに応答する必要がありますlayoutSubviews
。