子视图的页面控制

时间:2014-08-09 13:19:41

标签: ios objective-c uipagecontrol

我正在创建一个包含教程屏幕子视图的视图。 Tutorial screen

我希望灰色子视图可以使用页面控件

进行滑动

我已经实现了http://www.appcoda.com/uipageviewcontroller-tutorial-intro/的示例,但这适用于整个ViewControllers,我希望它只与子视图一起使用...

有没有人知道如何使用滑动手势实现PageControl,以便只有灰色子视图更改?任何好的教程?

2 个答案:

答案 0 :(得分:2)

灰色区域必须是UIScrollView,其内容视图包含教程的每个页面。在滚动视图上将pagingEnabled设置为YES,以便在滚动时它会对齐每个页面。

然后,您需要使用addTarget:action:forControlEvents:将操作附加到页面控件,并将UIControlEventValueChanged作为事件传递。然后,该操作必须是一种方法,它告诉滚动视图向前或向后移动页面,具体取决于页面控件的值是增加还是减少。您可以通过更改滚动视图的内容偏移量,或通过告诉它滚动以便特定的矩形可见来实现此目的。

最后,实现UIScrollView的委托,并使用告诉滚动视图何时停止滚动的方法(你需要结束减速效果,结束拖动并可能结束滚动动画),并在滚动视图更改页面时更新页面控件的值。

这就是它的全部内容。如果您需要更多详细信息,请阅读UIScrollViewUIScrollViewDelegateUIPageControl的文档。

答案 1 :(得分:2)

使用UIView代替ViewController

这是一个适合我的解决方案:

1)在NIB或Storyboard中创建scrollViewpageControl

2)ViewDidLoad

中的scrollView
    self.scrollView.backgroundColor = [UIColor clearColor];
    self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack; //Scroll bar style
    self.scrollView.showsHorizontalScrollIndicator = NO;
    //dont forget to set delegate in .h file
    [self.scrollView setDelegate:self];

    self.scrollView.showsVerticalScrollIndicator = YES; //Close vertical scroll bar
    self.scrollView.bounces = YES; //Cancel rebound effect
    self.scrollView.pagingEnabled = YES; //Flat screen
    self.scrollView.contentSize = CGSizeMake(640, 30);

3)在scrollView中创建您想要的views并将其添加到Array

//For instance, you want 3 views
    UIView *ViewOne = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height)];
    [ViewOne setBackgroundColor:[UIColor redColor]];

    UIView *ViewTwo = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.frame.size.width+1, self.scrollView.frame.size.height)];
    [ViewTwo setBackgroundColor:[UIColor greenColor]];

    UIView *ViewThree = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.scrollView.frame.size.width+2, self.scrollView.frame.size.height)];
    [ViewThree setBackgroundColor:[UIColor blueColor]];

    //add all views to array
    NSMutableArray *viewsArray = [[NSMutableArray alloc] initWithObjects:ViewOne, ViewTwo, ViewThree, nil];

4)ViewDidLoad

中的pageControl
    self.pageControl.numberOfPages = viewsArray.count;
    self.pageControl.currentPage = 0;
    self.pageControl.backgroundColor = [UIColor clearColor];
    [self.pageControl setTintColor:[UIColor whiteColor]];

5)全部添加

    for(int i = 0; i < viewsArray.count; i++)
    {
        CGRect frame;
        frame.origin.x = (self.scrollView.frame.size.width *i) + 10;
        frame.origin.y = 0;
        frame.size = CGSizeMake(self.scrollView.frame.size.width - 20,     self.scrollView.frame.size.height);

        NSLog(@"array: %@", [viewsArray objectAtIndex:i]);

        UIView *view = [[UIView alloc] initWithFrame:frame];
        view = [viewsArray objectAtIndex:i];
        [self.scrollView addSubview:view];


    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width*viewsArray.count, self.scrollView.frame.size.height);
}

6)跟踪scrollView并更新pageControl (DONT FORGET THE SCROLLVIEW DELEGATE)

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    CGFloat pageWidth = scrollView.frame.size.width;

    //int page = floor((scrollView.contentOffset.x - pageWidth*0.3) / pageWidth) + 1);

    self.pageControl.currentPage = (int)scrollView.contentOffset.x / (int)pageWidth;
    NSLog(@"CURRENT PAGE %d", self.pageControl.currentPage);
}

这应该可以解决问题。

PS。对不起所有神奇的数字。