標準のプッシュ セグエと動作が似ているカスタム セグエを構築しようとしていますが、私の場合は、カスタム ボタンを使用して画面を切り替えたいと考えています (このアプリにはタブ バーが適合しません。モーダル セグエも適切ではありません)。 . メイン画面はカスタム グラフィックスで、次の画面はマップです。ユーザーはマップ上のポイントを選択し、[完了] をクリックして、その座標とともにメイン画面に戻ります。ViewControllers をカスタム セグエに接続しようとしています。
私はインターネット全体で多くのソリューションを調査し、適合するソリューションを見つけましたが、コードは ViewControllers と AppDelegate のいたるところに散らばっています (Apple がそれを受け入れるかどうかはわかりません)。コード全体を CustomSegue.m /h に入れようとしています。テクニック(以下)を使用して2番目のViewControlerにセグエするため、成功は部分的ですが、2番目を閉じてメイン画面に戻る方法がわかりません。さまざまな手法を試しましたが、実行すると、コンパイラはアプリを終了してエラーを発生させます。ビルドおよび実行前のエラーも警告もありません。また、 [self disconnectModalViewControllerAnimated:YES]; を使用してボタンで却下しようとしました。または [自己却下ViewControllerAnimated:YES 完了:nil]; モーダルセグエを試してみると機能しますが、私のコードでは悪い結果が得られます。
これを行うためのきちんとした方法について提案がある人はいますか。私はここ数日間、この問題に取り組んでいます。多くのアプリでこの種のセグエ遷移が見られるので、非常に人気があり、簡単な解決策のようです。私は Xcode の経験があまりありません。これは私のカスタム セグエです (QuartzCore アニメーションを使用)。
#import "CustomTabBarSegue.h"
@implementation CustomTabBarSegue
-(void)perform {
UIViewController *src = (UIViewController*)[self sourceViewController];
UIViewController *dst = (UIViewController*)[self destinationViewController];
UIView *currentView = src.view;
UIView *theWindow = [currentView superview];
UIView *newView = dst.view;
[theWindow addSubview:newView];
CATransition *transition = [CATransition animation];
transition.delegate = self;
transition.duration = 1;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromRight;
[[theWindow layer] addAnimation:transition forKey:@"MySegue"];
}
@end
以下は、destinationVC から戻るボタンのコードです。(動作しません)
- (IBAction)dismiss:(id)sender
{
[self dismissViewControllerAnimated:YES completion:^() {
[self performSegueWithIdentifier:@"MySegue" sender:self];
}];
}