如何使用滑动手势 XCode 交换视图

Posted

技术标签:

【中文标题】如何使用滑动手势 XCode 交换视图【英文标题】:How to swap views using a swipe gesture XCode 【发布时间】:2011-04-16 02:28:44 【问题描述】:

我正在使用 XCode 为 ios 平台开发一个 Cocoa 触摸应用程序,但我无法找到如何实现滑动手势,该手势允许用户向左或向右滑动手指以更改为新的 ViewController (笔尖/xib 文件)。我已经使用按钮和模式转换完成了swapView IBAction,并且我已经阅读了 Apple 的 TouchGestureRecognizer,但我不知道如何实现允许视图更改的滑动操作。

我不想使用滚动视图,因为我有几十个视图控制器,我希望用户能够滑动浏览。

这是一个例子:

第一个视图 Controller.xib: SwipeRight- 转到第二个 View Controller.xib

第二视图控制器.xib: SwipeLeft- 转到第一个 View Controller.xib SwipeRight- 转到第三个 View Controller.xib

等等等等

我之前没有使用过 UISwipe/Touch Gestures,但我使用了 IBAction 方法通过带有模态转换的按钮切换视图(见下文):

-(IBAction)swapViews;  
    SecondViewController *second2 =[[SecondViewController alloc initWithNibName:@"SecondViewController" bundle:nil];
    second2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:second2 animated:YES];
    [second2 release];

是否使用滑动来执行格式不同的类似方法?如果是这样,我该如何整理并格式化它。

谢谢

编辑 - 根据问题的评论回答

把它放在你的 viewDidLoad 中

UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftDetected:)];
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
[swipeRecognizer release];

然后添加一个选择器,将以下代码粘贴到您的主...

- (IBAction)swipeLeftDetected:(UIGestureRecognizer *)sender 
    NC2ViewController *second2 =[[NC2ViewController alloc] initWithNibName:@"NC2ViewController" bundle:nil];
    second2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:second2 animated:YES];
    [second2 release];

然后确保你导入你正在交换使用的 otherViewController

#import "SecondViewController"

在主文件的顶部。希望这会有所帮助。

结束编辑

【问题讨论】:

嗨 AppleFanBoy,你能实现 UIGesture 来交换视图吗?我尝试过同样的方法,但没有成功。以前的 NIB 不释放。如果它正在工作,你能否发布代码。谢谢。 我成功了,可以让它发挥作用 把它放在你的viewDidLoad中; UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftDetected:)]; swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft; [self.view addGestureRecognizer:swipeRecognizer]; [swipeRecognizer 发布]; 然后添加一个选择器,将以下代码粘贴到您的主... - (IBAction)swipeLeftDetected:(UIGestureRecognizer *)sender NC2ViewController *second2 =[[NC2ViewController alloc] initWithNibName:@"NC2ViewController “捆绑:无]; second2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [自我presentModalViewController:second2动画:YES]; [第二次发布]; 然后确保您使用主文件顶部的#import "SecondViewController" 导入要交换的otherViewController。希望这会有所帮助。 【参考方案1】:

这听起来是使用 UIGestureRecognizer 或更确切地说是 UISwipeGestureRecognizer 的最佳时机。

有关如何使用它们的更多信息,请阅读事件处理指南的Gesture Recognizers 部分。

【讨论】:

【参考方案2】:

假设您想向左滑动以从右侧调出另一个视图。

在情节提要中,拖放滑动手势识别器。它将在视图控制器下方制作一个图标;将此图标拖放到要导航到的 ViewController 上。这将添加一个转场,选择自定义转场。然后创建一个 UIStoryboardSegue 类。添加以下代码:

- (void)perform 
    UIViewController* source = (UIViewController *)self.sourceViewController;
    UIViewController* destination = (UIViewController *)self.destinationViewController;

    CGRect sourceFrame = source.view.frame;
    sourceFrame.origin.x = -sourceFrame.size.width;

    CGRect destFrame = destination.view.frame;
    destFrame.origin.x = destination.view.frame.size.width;
    destination.view.frame = destFrame;

    destFrame.origin.x = 0;

    [source.view.superview addSubview:destination.view];

    [UIView animateWithDuration:0.5
                     animations:^
                         source.view.frame = sourceFrame;
                         destination.view.frame = destFrame;
                     
                     completion:^(BOOL finished) 
                         UIWindow *window = source.view.window;
                         [window setRootViewController:destination];
                     ];

【讨论】:

以上是关于如何使用滑动手势 XCode 交换视图的主要内容,如果未能解决你的问题,请参考以下文章

从 Tab View Controller 切换到滑动手势时的 iOS Xcode 问题

在 xcode 的 SideMenu 库上禁用滑动/手势

如何在没有导航栏的情况下水平切换视图?

如何在 ios 11 中使用主详细信息视图禁用向后滑动手势?

如何解决 XCode 滑动手势以转到上一个/下一个文件冻结编辑器?

使用带有自定义容器视图控制器的滑动手势识别器崩溃