用于视图控制器之间交互式滑动转换的简单库

时间:2014-07-23 12:30:17

标签: ios swipe viewcontroller uiviewanimationtransition

正如标题所述,我正在寻找一个简单库,我可以使用它来允许用户在视图控制器之间交互式滑动(请记住我的应用程序没有导航控制器) 。我知道SO上已经有几个不同的问题可以回答这个问题但是我知道它们中的大多数已经很老了,我想知道iOS 7是否有更简单的解决方案。我花了几天时间尝试实现不同的方法,但在每种情况下,我的代码都变得太混乱,并且充满了各种错误。顺便说一句,我的所有segue都是模态的(如果有用的话?)。

通过简单我的意思是一个可以从手势识别器调用的独立库,这是该特定视图控制器所需的全部内容

-(void)hasswipedright:(UIGestureRecognizer*)Gesture{
//Library Creates transition between this VC and another VC
}

我尝试过以下尝试:

我会使用UIScrolView或UIPageContainer,但我认为这不会起作用,因为我只想将视图控制器之间的某些跳转设计为“可跳过”(即B可以滑动到A而不是其他方式,但是A可以滑到C和D,反之亦然。

有什么建议吗?我希望使转换具有交互性(类似于在iOS7的Safari中向后移动所需的pangesturerecognizer)。任何评论都非常感谢。我不希望因为要求一个库而显得懒惰,只是因为我没有时间手动重新格式化一切(而且,我只是iOS开发的初学者!)

非常感谢!

4 个答案:

答案 0 :(得分:1)

https://github.com/cwRichardKim/RKSwipeBetweenViewControllers

查看“被删除”功能或类似的功能。你有两个选择。您可以设置一个pageviewcontroller然后使用委托方法(它们位于该存储库中以及底部附近)来指示前后显示的视图控制器,这样您就可以检查每次滑动时要执行的操作,或者您可以从pageviewcontroller获取滚动视图本身(请参阅方法“syncscrollview”),然后将自定义方法(在这种情况下被删除)添加到已识别的手势。然后,您可以应用逻辑以确保正确的视图控制器出现

答案 1 :(得分:1)

这可能会对您有所帮助YZSwipeBetweenViewController

答案 2 :(得分:1)

看看这个回购可能会有所帮助。

它帮助您创建一个控制器,其中UiTableViewCell持有带有可滚动节头的UiPageViewController来更改viewController,并且这些viewControllers也被刷过。

enter image description here

https://github.com/iossolutions/PBSwipeController

添加这些对象并在viewdidload方法中初始化: -

    HeadingArray = @[@"Counting",@"Alphabets",@"Colors",@"Random",@"Names"];
    NSArray *array1 = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10"];
    NSArray *array2 = @[@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z"];
    NSArray *array3 = @[@"White",@"Orange",@"Blue",@"Green",@"Yellow"];
    NSArray *array4 = @[@"p",@"q",@"r",@"s",@"t"];
    NSArray *array5 = @[@"Abhi",@"Kabhi",@"Jabhi",@"Ravi",@"Lavi"];
    dataArray = [[NSMutableArray alloc]initWithObjects:array1,array2,array3,array4,array5, nil];

    [self addInitialObjects];
    [self setupSelector];}
    -(void)addInitialObjects{

    // Add Scroolable object in section header
    self.currentPageIndex = 0;
    _scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,40)];
    _scrollView.backgroundColor = [UIColor colorWithRed:30.0f/255.0f green:144.0f/255.0f blue:255.0f/255.0f alpha:1];
    for (int i = 0; i<HeadingArray.count; i++) {
        UIButton  *button = [[UIButton alloc]init];
        button.frame = CGRectMake(i*100, 0, 100, 40);
        [_scrollView addSubview:button];
        button.tag = i;
        button.backgroundColor = [UIColor clearColor];
        [button addTarget:self action:@selector(tapSegmentButtonAction:) forControlEvents:UIControlEventTouchUpInside];
        [button setTitle:[HeadingArray objectAtIndex:i] forState:UIControlStateNormal];
        button.titleLabel.textColor = [UIColor blackColor];
    }
    CGRect contentRect = CGRectZero;
    for (UIView *view in _scrollView.subviews) {
        contentRect = CGRectUnion(contentRect, view.frame);
    }
    _scrollView.contentSize = contentRect.size;

    // Page view controller for swipeable view
    UIPageViewController *pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
    navigationController = [[PBSwipeController alloc]initWithRootViewController:pageController];
    navigationController.swipeDelegate = self;
    [self addChildViewController:navigationController];
    [navigationController didMoveToParentViewController:self];
}    

在您的单元格中,索引处的行传递数据: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell1 == nil) {
        cell1 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    if (indexPath.section==0) {
        cell1.textLabel.text = @"Cell - Below is section header";
        cell1.backgroundColor = [UIColor colorWithRed:0.0f/255.0f green:255.0f/255.0f blue:127.0f/255.0f alpha:1];
    }
    else {
        cell1.textLabel.text = @"";
        cell1.backgroundColor = [UIColor clearColor];
        navigationController.pagesNameArray = HeadingArray;
        navigationController.pageDataArray = dataArray;
        [navigationController viewControllerAtIndex:0];
        [cell1.contentView addSubview:navigationController.view];
    }
    return cell1;
}

答案 3 :(得分:-1)

你可以使用这个回购。它对于RnD来说简单易懂。 (Swift 3代码)

https://github.com/lakshikabhardwaj/LBViewControllerCollection

let catVC =   CatVC(nibName: "catVC", bundle: nil)    //UIViewController Objects
let cowVC =   CowVC(nibName: "CowVC", bundle: nil)
let elephantVC = ElephantVC(nibName: "ElephantVC", bundle: nil)
let chatVC =   ChatVC(nibName: "ChatVC", bundle: nil)

    let mainViewController = CPPageMenuVC(nibName: "CPPageMenuVC", bundle: nil)

let pageMenuarray :[PageModal] = [PageModal(pageTitle: "Cat", pageVC: catVC),PageModal(pageTitle: "Cow", pageVC: cowVC),PageModal(pageTitle: "Chat", pageVC: chatVC),PageModal(pageTitle: "ElephantElephant", pageVC: elephantVC)]
        pageMenuVC.pageArray = pageMenuarray