我正在使用XCode为iOS平台开发一个Cocoa touch应用程序但是却无法找到如何实现一个滑动手势,允许用户向左或向右滑动手指以更改为新{{1 (nib / xib文件)。我已经使用按钮和模态转换完成了ViewController
,我已经阅读了有关Apple的swapView IBAction
,但我不知道如何实现允许视图更改的滑动操作。
我不想使用滚动视图,因为我有几十个视图控制器,我希望用户能够轻扫。
以下是一个例子:
First View Controller.xib: SwipeRight-转到第二个View Controller.xib
Second View Controller.xib:
SwipeLeft-转到第一个View Controller.xib
SwipeRight-转到第三个View Controller.xib
等等
之前我没有使用过UISwipe / Touch Gestures,但我使用TouchGestureRecognizer
方法使用带模态转换的按钮切换视图(见下文):
IBAction
使用滑动来执行不同格式的类似方法吗?如果是这样,我该如何排序并格式化它。
谢谢
编辑 - 按问题评论回答
将其放在viewDidLoad
中-(IBAction)swapViews; {
SecondViewController *second2 =[[SecondViewController alloc initWithNibName:@"SecondViewController" bundle:nil];
second2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:second2 animated:YES];
[second2 release];
}
然后添加一个选择器,方法是将以下代码粘贴到主...
中UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftDetected:)];
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
[swipeRecognizer release];
然后确保导入正在使用
交换的otherViewController- (IBAction)swipeLeftDetected:(UIGestureRecognizer *)sender {
NC2ViewController *second2 =[[NC2ViewController alloc] initWithNibName:@"NC2ViewController" bundle:nil];
second2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:second2 animated:YES];
[second2 release];
}
位于主文件的顶部。希望这会有所帮助。
结束修改
答案 0 :(得分:4)
这听起来像是使用UIGestureRecognizer或更具体地UISwipeGestureRecognizer的完美时间。
有关如何使用它们的更多信息,请阅读“事件处理指南”的Gesture Recognizers部分。
答案 1 :(得分:0)
让我们假设你想向左滑动以显示右边的另一个视图。
在故事板中,拖放滑动手势识别器。它将在视图控制器下方生成一个图标;拖动此图标并将其拖放到要导航到的ViewController上。这将添加一个segue,选择自定义segue。然后创建一个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];
}];
}