2 シーンのストーリーボードがあります。各シーンには、ViewController アイコンから他のシーンに Ctrl キーを押しながらドラッグしたセグエがあります。最初のビューから 2 番目のビューへのセグエには識別子 "left" があり、2 番目から最初のビューへのセグエは "right" で、両方のセグエは UIStoryboardSegue から継承された同じカスタム クラスを指します。各 ViewController には Attribute Inspector でタイトルがあり、カスタム クラスはまだ割り当てられていません。
AppDelegate では、UISwipeGestureRecognizer を 4 方向すべてに設定し、現在のビュー コントローラーに "left"、"right"、"up"、または "down" の識別子を持つセグエがある場合にユーザーがどのようにスワイプするかに応じて、performSegueWithIdentifier を起動します。
- (void) handleSwipe:(UISwipeGestureRecognizer *) recognizer {
NSString *direction;
switch ([recognizer direction]) {
case UISwipeGestureRecognizerDirectionLeft:
direction = @"left";
break;
case UISwipeGestureRecognizerDirectionUp:
direction = @"up";
break;
case UISwipeGestureRecognizerDirectionDown:
direction = @"down";
break;
default:
direction = @"right";
break;
}
@try {
UIViewController *rootVC = self.window.rootViewController;
[rootVC performSegueWithIdentifier:direction sender:rootVC];
} @catch (NSException *e) {
NSLog(@"Segue with identifier <%@> does not exist", direction);
}
}
私のカスタム Segue クラスでは、次のように "perform" メソッドをオーバーライドします (このままでは壊れてしまうので特別なことはありませんが、後でセグエのカスタム アニメーションを作成できるようにオーバーライドします)。
-(void) perform {
UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;
NSLog(@"source: %@, destination: %@", src.title, dst.title);
[src presentModalViewController:dst animated:NO];
}
ただし、左への最初のスワイプで一度だけ機能し、その後は何も起こりません。「実行」メソッドの NSLog を介して、この最初の遷移の後、セグエのソースと宛先のビュー コントローラーが何らかの理由で変更されず、それ以降は同じままであることを確認できます。簡単なものが欠けているように見えますが、わかりません。
私に厳しすぎないでください;)、私はiOS開発に不慣れです。