如何在 iOS 中创建滑动导航(在 Objective-C 中)

Posted

技术标签:

【中文标题】如何在 iOS 中创建滑动导航(在 Objective-C 中)【英文标题】:How to create swipe navigation in iOS (in Objective-C) 【发布时间】:2016-01-22 11:21:14 【问题描述】:

我想构建像这些图片中显示的那样的滑动导航。总共有 4 个水平放置的标题。

swipe navigation

它们如下。

    “历史” “规则” “专业版” “条款和条件”

如果我正在阅读“历史”并从右向左滑动,则应显示“规则”。

如果我在“规则”上,并从左向右滑动,那么它应该显示“历史”

谁能指导我如何做到这一点?

谢谢。

【问题讨论】:

这正是您想要的。 github.com/maxep/MXSegmentedPager 使用故事板示例更容易实现。 谢谢@Rushisangani .....这就是我想要的。 【参考方案1】:

您发布的链接是静态屏幕截图,对描述您想要做什么没有多大帮助。

我认为您所描述的是UIPageViewController 的正常行为,设置为幻灯片过渡而不是卷曲过渡。

在 Xcode 中搜索“PhotoScroller”。这将指向一个演示应用程序,该应用程序说明了我认为您所追求的效果。该应用程序比您需要的更复杂,因为它支持捏缩放和图片平铺渲染,但您可以忽略这些内容。

【讨论】:

谢谢@duncan .....我会检查 UIPageViewController。并且不知道如何创建动画 gif。今后如有必要,我将上传动画 gif。再次感谢:)【参考方案2】:

我也会推荐一个 UIPageViewController。这是一个简单的实现:

@interface SwipeViewController : UIViewController <UIPageViewControllerDataSource>

@property (nonatomic, strong) UIPageViewController *pageViewController;
@property (nonatomic, strong) NSArray <UIViewController*> *viewControllers;

@end

@implementation SwipeViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    // add page view controller
    [self.pageViewController willMoveToParentViewController:self];
    [self.view addSubview:self.pageViewController.view];
    [self addChildViewController:self.pageViewController];
    [self.pageViewController didMoveToParentViewController:self];

    // set the first view controller as the displayed view controllers (requires an array of exactly one view controller)
    [self.pageViewController setViewControllers:@[self.viewControllers.firstObject] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];


// array of 4 random colored view controllers
- (NSArray <UIViewController*>*)viewControllers 
    if (!_viewControllers) 
        _viewControllers = (
            NSMutableArray *viewControllers = [NSMutableArray new];
            for (int i = 0; i < 4; i++) 
                UIViewController *aViewController = [UIViewController new];
                aViewController.view.backgroundColor = [UIColor colorWithRed:(arc4random()%255)/255. green:(arc4random()%255)/255. blue:(arc4random()%255)/255. alpha:1];
                [viewControllers addObject:aViewController];
            
            viewControllers;
        );
    
    return _viewControllers;


- (UIPageViewController *)pageViewController 
    if (!_pageViewController) 
        _pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
        _pageViewController.dataSource = self;
    
    return _pageViewController;


- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
    NSInteger index = [self.viewControllers indexOfObject:viewController];
    return index > 0 ? self.viewControllers[index-1] : nil;


- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
    NSInteger index = [self.viewControllers indexOfObject:viewController];
    return index + 1 < self.viewControllers.count ? self.viewControllers[index+1] : nil;


@end

【讨论】:

谢谢@casey ...我会在几个小时内尝试这个然后回来。

以上是关于如何在 iOS 中创建滑动导航(在 Objective-C 中)的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 IOS 中创建滑动条菜单

我们可以在 iOS 中创建多个导航控制器吗?

如何在 Swift Xcode 中创建自定义导航栏?

如何在 iOS 中创建上拉视图 [关闭]

在 Xcode 中创建带有标题的大导航栏

在 Swift 中创建滑动转场