Stu*_*rtM 6 uiviewcontroller uiview ios ios6
我正在构建一个适用于iOS6 +的应用程序.该应用程序将在应用程序的某一点具有主视图控制器.
我希望这个主视图控制器能够处理向左滑动并在屏幕上向右滑动,然后显示另一个视图控制器.
有没有一种简单的方法可以在核心iOS6 +中实现这一点,或者我应该寻找另一个库等.
我已经在菜单样式中使用幻灯片,否则在应用程序中.我也理解并且可以找到一百万个替代品.
我要找的是有一个视图控制器(它在'中间').然后当他们向左/向右滑动时,显示另一个视图控制器.然后,他们可以向后滑动相反方向或单击后退按钮返回主控制器.
编辑 -
具体我正在寻找执行以下操作的功能:预加载将滑入的控制器.当滑动发生(正在发生)...控制器通过触摸拖动/滑入.无论是滑动控制器(lefT /右),都可以进行相同的拖动/滑动.
编辑2 -
我正在寻找用手指拖动视图控制器的功能.取决于拖动发生的方式,它将拉动相同的视图控制器.
即布局将是:[VC for Drag] [主控制器] [VC for Drag].
如果用户从左向右滑动,或从右向左滑动,则另一个控制器被拖动到顶部,并且可以使用相反的条目滑动返回到主控制器.
我最喜欢的侧抽屉控制器:https: //github.com/mutualmobile/MMDrawerController
MMDrawerController是高度可配置的,可以完成你提到的所有事情:
如果您正在使用故事板,则可以使用此扩展程序来获得故事板支持:https://github.com/TomSwift/MMDrawerController-Storyboard
编辑:
另一种选择可能是使用UIPageViewController过渡风格UIPageViewControllerTransitionStyleScroll:https: //developer.apple.com/library/ios/documentation/uikit/reference/UIPageViewControllerClassReferenceClassRef/UIPageViewControllerClassReference.html
这将在侧视图控制器中"拉"而不是"揭开"它们.
编辑2:每个请求的示例
您唯一真正复杂的要求是左右都使用相同的视图控制器.这意味着我们必须跟踪视图控制器的呈现位置,以便我们可以正确地管理我们的数据源.如果没有这个要求,我们可以用一个数组来支持我们的数据源,然后从中得到next/prev.
首先是故事板.故事板有三个视图控制器:1)UIPageViewController我已经将其分类为TSPageViewController.不要忘记将页面控制器过渡样式属性设置为"滚动".2)"中心"视图控制器,以及3)"侧"视图控制器.对于中心和侧面,我将每个的故事板ID分别设置为"中心"和"侧面".对于这个样本,中心控制器和侧控制器都是普通的UIViewControllers,我已经设置了他们的视图backgroundColor来区分它们.

二,页面视图控制器:
.H
@interface TSPageViewController : UIPageViewController
@end
Run Code Online (Sandbox Code Playgroud)
.M
@interface TSPageViewController () <UIPageViewControllerDataSource>
@end
@implementation TSPageViewController
{
UIViewController* _side;
UIViewController* _center;
}
- (void) viewDidLoad
{
[super viewDidLoad];
self.dataSource = self;
_side = [self.storyboard instantiateViewControllerWithIdentifier: @"side"];
_center = [self.storyboard instantiateViewControllerWithIdentifier: @"center"];
[self setViewControllers: @[_center]
direction: UIPageViewControllerNavigationDirectionForward
animated: NO
completion: nil];
}
- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
if ( viewController == _center )
{
_side.title = @"right";
return _side;
}
if ( viewController == _side && [_side.title isEqualToString: @"left"] )
{
return _center;
}
return nil;
}
- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
if ( viewController == _center )
{
_side.title = @"left";
return _side;
}
if ( viewController == _side && [_side.title isEqualToString: @"right"] )
{
return _center;
}
return nil;
}
@end
Run Code Online (Sandbox Code Playgroud)
同样,这里唯一特别的是跟踪侧控制器当前是"左"还是"右".这个实现有一个问题,它依赖于UIPageViewController的行为不"向前翻页"和缓存视图控制器(如果确实如此,我们的逻辑就会混淆).因此,您可能需要考虑一种更强大的机制来跟踪视图控制器当前所在的一侧.为此,您可能需要引入自己的滑动手势识别器并使用其中的数据来驱动左/右追踪.
如果你可以抛出左右使用相同视图控制器的要求,那么你可以有单独的左/右/中央控制器,存储在一个数组中,并根据你在数组中看到的内容返回next/prev控制器.更容易,更健壮!
| 归档时间: |
|
| 查看次数: |
10634 次 |
| 最近记录: |