如何使用滑动手势 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 问题
如何在 ios 11 中使用主详细信息视图禁用向后滑动手势?