[解決済み] UIViewControllerContextTransitioningで "From View Controller "が消える。
質問
ある問題が発生しましたので、以下に説明します。
私は
UIViewControllerContextTransitioning
を使っています。
第一ビューコントローラと第二ビューコントローラの2つのビューコントローラを用意しました。
ここで、2つ目のビューコントローラをアニメーション付きで1つ目のビューコントローラの上に追加したいと思います。その結果、2つ目のビューコントローラが透明になり、2つ目のビューコントローラの下に1つ目のビューコントローラが表示されるようになりました。
しかし、最初のビューコントローラが見えず、2番目のビューコントローラの下に黒い画面だけが見えています。
-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
self.transitionContext = transitionContext;
if(self.isPresenting){
[self executePresentationAnimation:transitionContext];
}
else{
[self executeDismissalAnimation:transitionContext];
}
}
-(void)executePresentationAnimation:(id<UIViewControllerContextTransitioning>)transitionContext{
UIView* inView = [transitionContext containerView];
UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
CGRect offScreenFrame = inView.frame;
offScreenFrame.origin.y = inView.frame.size.height;
toViewController.view.frame = offScreenFrame;
toViewController.view.backgroundColor = [UIColor clearColor];
fromViewController.view.backgroundColor = [UIColor clearColor];
inView.backgroundColor = [UIColor clearColor];
[inView insertSubview:toViewController.view aboveSubview:fromViewController.view];
// [inView addSubview:toViewController.view];
CFTimeInterval duration = self.presentationDuration;
CFTimeInterval halfDuration = duration/2;
CATransform3D t1 = [self firstTransform];
CATransform3D t2 = [self secondTransformWithView:fromViewController.view];
[UIView animateKeyframesWithDuration:halfDuration delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
[UIView addKeyframeWithRelativeStartTime:0.0f relativeDuration:0.5f animations:^{
fromViewController.view.layer.transform = t1;
}];
[UIView addKeyframeWithRelativeStartTime:0.5f relativeDuration:0.5f animations:^{
fromViewController.view.layer.transform = t2;
}];
} completion:^(BOOL finished) {
}];
[UIView animateWithDuration:duration delay:(halfDuration - (0.3*halfDuration)) usingSpringWithDamping:0.7f initialSpringVelocity:6.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
toViewController.view.frame = inView.frame;
} completion:^(BOOL finished) {
[self.transitionContext completeTransition:YES];
}];
}
いつ
[self.transitionContext completeTransition:YES];
を呼び出すと、突然1つ目のビューコントローラが消え、2つ目のビューコントローラの下に黒い画面が表示されます。
どなたかお分かりになる方いらっしゃいますか? ありがとうございます。
どのように解決するのですか?
私も同じ問題を抱えていました。iOS 8 のバグのようです。私は レーダーを提出しました。 .
私が使用したのは
レヴール
を使用して、画面が黒くなった後のビュー階層を検査します。キーである
UIWindow
は完全に空です。ビュー階層が全くありません!
少し遊んでみたところ、簡単なケースであれば、簡単に回避できるようです。単に
toViewController
のビューをキー ウィンドウのサブビューとして追加し直せばよいのです。
transitionContext.completeTransition(true)
UIApplication.sharedApplication().keyWindow!.addSubview(toViewController.view)
確認したところ、キーウィンドウの
rootViewController
が正しく設定されたままなので、問題ありません。すでに提示されているモーダルコントローラの中からコントローラを提示した場合にどうなるかはわからないので、より複雑なケースについては、いろいろと実験してみる必要がありそうです。
関連
-
iOS classic error Undefined symbols for architecture XXX:
-
iOSコンパイルポッドでエラー CocoaPods could not find compatible versions for pod "XXXXX" が報告される。
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] iOS - UITextFieldの外側をタッチするとキーボードが外れる。
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み】iOSで最上位のビューコントローラーを見つける方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] Objective-CでNSNotificationCenterを通してメッセージを送受信する?
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?