私は、iPhoneのウィンドウの全体を占めるUIViewを持っています。それが景色に回転するとき、私は期待するように、それが所定の位置にスナップするまで、エッジは小さな黒いバーを取得します。黒いバーなしでUIViewを回転できますか?
私はその画面を回転させるには黒いバーは表示せず、通常はオフスクリーンの部分を表示するように、画面よりも大きくする必要があります。私はフレームとビューの境界を増加しようとしましたが、それはトリックを行うようには見えません。
誰でもこれを成功させましたか?
私は、iPhoneのウィンドウの全体を占めるUIViewを持っています。それが景色に回転するとき、私は期待するように、それが所定の位置にスナップするまで、エッジは小さな黒いバーを取得します。黒いバーなしでUIViewを回転できますか?
私はその画面を回転させるには黒いバーは表示せず、通常はオフスクリーンの部分を表示するように、画面よりも大きくする必要があります。私はフレームとビューの境界を増加しようとしましたが、それはトリックを行うようには見えません。
誰でもこれを成功させましたか?
これを行うには、2つのことが必要です。
まず、ウィンドウのルートビューコントローラーは、常にウィンドウのサイズに合わせてビューのサイズを変更します。したがって、あなたの大きなビューは、ルートビューコントローラのビューのサブビューである必要があります(それがサイズ変更されないようにするため)。ルートビューコントローラのビューには、clipsToBounds
をNOに設定する必要があります。実際、大きなビューのすべての祖先はclipsToBounds
をNOに設定する必要があります。
第2に、ウィンドウが回転すると、ウィンドウの境界の外側に表示されるビューを明示的に隠すために、ブラックサブビューを与えます。これらの黒いサブビューは、ルートビューコントローラのビューの前に配置されます。
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
UIWindow *window = self.view.window;
[window bringSubviewToFront:window.rootViewController.view];
}
2つのUIWindowが重なっている場合には、別の方法があります。 willAnimateRotationToInterfaceOrientationが呼び出されたときに一番手前のUIWindowの黒いバーのサブビューを直接検索し、明示的に非表示にすることです(バックグラウンドでは回転できないコンテンツが必要です)。 。私は現在、標準速度より遅いで回転するように画面を要求するアプリに取り組んでいます
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
UIWindow* window = self.view.window;
for (UIView* view in [window subviews]) {
if (!CGRectIntersectsRect(window.bounds, view.frame)) {
view.hidden = YES;
}
for (UIView* view_ in [view subviews]) {
CGRect frame = [view_ convertRect:view_.frame toView:window];
if (!CGRectIntersectsRect(window.bounds, frame)) {
view_.hidden = YES;
}
}
}
}
UINavigationControllerとUITabBarControllerはどちらも、デフォルトではlayer.masksToBoundsがYESに設定されているシステムサブビュー(UINavigationController:UINavigationTransitionView; UITabBarController:UITransitionViewとUIViewControllerWrapperView)を持っています。回転中に黒いエッジを除去するには、これらのレイヤーと他のすべての階層ビューのlayer.masksToBoundsをNOに設定する必要があります。
しかし、上記のシステムビューのレイヤーを変更することの効果がわからないので、アニメーションを完了したら、layer.masksToBoundsをYESに戻すことをお勧めします。
これは私にとってはうまくいきます。 – David