tabBar の選択から表示されるアイコン メニューを正常に作成しました。このメニューは、縦向きまたは横向きで表示できます。
画面上のスペースのため、縦向きで 4x4 のアイコンを表示できるようにしました.しかし、横向きで表示したときのサイズ変更により、これはうまく機能しません..そのため、2 行を表示できるようにしました。このため、メニュー用に 2 つの UIView を作成することにしました。デバイスが回転すると、2 つのビューが切り替わります。
つまり、現在縦向きでデバイスが回転している場合、横向きをロードして縦向きをアンロードし、その逆も同様です。
これは、デバイスの回転でビューを変更するために使用しているコードです。これは完全に正常に機能します (最適なコードではないかもしれませんが、私ができる最善のコードです)。
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait)
{
if([jumpBarContainerLandscape superview])
{
// Device is changing from landscape to protrait change views to fit
// load landscape view
jumpBarContainerPortrait = [[UIView alloc] initWithFrame:CGRectMake(0.0, (367 - jumpBarHeightPortrait), 320.0, (jumpBarHeightPortrait + 49.0))];
jumpBarContainerPortrait.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
jumpBarContainerPortrait.alpha = 0.0;
// add jumpbar container to view
[self.view insertSubview:jumpBarContainerPortrait belowSubview:actionTabBar];
[UIView animateWithDuration:0.2
delay:0.0f
options:UIViewAnimationCurveEaseIn
animations:^{
jumpBarContainerLandscape.alpha = 0.0;
} completion:^(BOOL finished) {
if (finished) {
}
}];
[UIView animateWithDuration:0.2
delay:0.0f
options:UIViewAnimationCurveEaseIn
animations:^{
jumpBarContainerPortrait.alpha = 1.0;
} completion:^(BOOL finished) {
if (finished) {
// remove subView for superView
[jumpBarContainerLandscape removeFromSuperview];
}
}];
}
}
else if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight)
{
if ([jumpBarContainerPortrait superview])
{
// Device is changing from portrait to landscape change views to fit
// load landscape view
jumpBarContainerLandscape = [[UIView alloc] initWithFrame:CGRectMake(0.0, (207 - jumpBarHeightLandscape), 480.0, (jumpBarHeightLandscape + 49.0))];
jumpBarContainerLandscape.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];
jumpBarContainerLandscape.alpha = 0.0;
// add jumpbar container to view
[self.view insertSubview:jumpBarContainerLandscape belowSubview:actionTabBar];
// fade out
[UIView animateWithDuration:0.2
delay:0.0f
options:UIViewAnimationCurveEaseIn
animations:^{
jumpBarContainerPortrait.alpha = 0.0;
} completion:^(BOOL finished) {
if (finished) {
}
}];
// fade in
[UIView animateWithDuration:0.2
delay:0.0f
options:UIViewAnimationCurveEaseIn
animations:^{
jumpBarContainerLandscape.alpha = 1.0;
} completion:^(BOOL finished) {
if (finished) {
// remove subView for superView
[jumpBarContainerPortrait removeFromSuperview];
}
}];
}
}
今私が抱えている問題は、2 つの UIView 間のアニメーションが非常に醜いことです。アニメーションで 2 つの異なるビューを見ることができるのはあまり滑らかではなく、望ましくありません。 2つの間のクロスフェードにより、少し滑らかに見えるなど...
どんな助けでも大歓迎です。
編集:
したがって、CATransaction を作成しようとしましたが、1 行にエラーがあり、このエラーが発生しました 「UIView」の目に見える @interface がセレクター「jumpBarContainerPortrait」 を宣言していません 以下のこのエラーが発生する行にコメントを追加しました..任意の助けをいただければ幸いです
[CATransaction begin];
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 3.50;
[self.view insertSubview:jumpBarContainerPortrait belowSubview:actionTabBar];
[[self.view jumpBarContainerPortrait] addAnimation:animation forKey:@"Fade"]; // Error is happening here!
[CATransaction commit];