我了解如何实现UISwipeGestureRecognizer,但我不明白如何正确地使用多个视图。
我的最终目标是提供一个时尚的界面,可以使用按钮或滑动来更改视图。我希望恒定的背景而不是背景图像显示它再次转移到完全相同的图像。我目前正在使用故事板,每个视图都有自己的控制器,我希望(如果可能的话)保持它接近这种格式,以便直观地了解正在发生的事情。
我已经读过,子视图可能是我对这种情况的最大希望(在调用滑动之前将它们保持在正确的位置),但这会破坏我正在使用的当前故事板结构,并且肯定会破坏任何视觉效果明晰。
有没有人有任何建议?
答案 0 :(得分:3)
我以编程方式做了同样的事情,但你可以使用故事板实现相同的目标
<强> 1 即可。您需要具有相同背景的基本视图
<强> 2 即可。在基本视图控制器的viewDidLoad中添加3个视图(或2个,具体取决于您的要求)左,中,右,透明背景如下所示
[self addChildViewController:myChildViewController];
[myChildViewController view].frame = CGMakeRect(x,y,width,height);//Left one will have x = -320, y=0 ,Middle x= 0, y= 0, Right x = 32O etc.
/* Add new view to source view */
[self.view addSubview:[myChildViewController view]];
/* Inform 'didMoveToParentViewController' to newly added view controller */
[myChildViewController didMoveToParentViewController:self];
第3 即可。在手柄滑动方法中,使用动画更改视图框,使其看起来像滑动页面 e.g
//swipe left, get right view in middle
[UIView animateWithDuration:0.2 animations:^{
CGRect frame = rightViewController.view.frame;
frame.origin.x = 0;
frame.origin.y = 0;
rightViewController.view.frame = frame;
CGRect middleViewFrame = middleViewController.view.frame;
middleViewFrame.origin.x = -320;
middleViewController.view.frame = middleViewFrame;
}];
答案 1 :(得分:1)
您可以使用导航执行此操作。如果您不想要导航栏,则可以隐藏它。您可以将左滑动手势识别器连接到下一个控制器的segue,并将右滑动手势识别器连接到展开segue(或从其动作方法调用popViewControllerAnimated:)。如果你想要一个恒定的背景,那么你需要将它添加到导航控制器的视图(作为背景颜色),并让子视图控制器的视图是透明的(或部分是这样)。导航控制器的根视图控制器中的此代码将添加背景:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"img.tiff"]];
}
答案 2 :(得分:0)
我确切地知道你在谈论什么,我实际上对我当前的项目做了同样的事情。
我使用Interface Builder和单个视图控制器完成了这项工作。基本上我在视图中放置了一个UIImageView并将其设置为你想要的背景,然后我在它上面放了一个透明的UIScrollView。在滚动视图中,我将两个想要水平滚动的视图放在一起。
不要忘记启用UIScrollView分页。就我而言,我有两个表视图。从第一个开始,如果你从右向左滑动,它将滚动到下一个表格视图,如果你从左向右滑动,它将滚动回到第一个。