ios 如何在单击 UIPageControl 的点时更改页面

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13854222/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 21:31:30  来源:igfitidea点击:

How can i change the page on clicking the dots of UIPageControl

iphoneiosuiscrollviewuipagecontrol

提问by Vivek Sehrawat

Here I have a pagecontrol which works good but on clicking on dot it doesn't change the page so please help in the function of changepage:

在这里,我有一个页面控件,它运行良好,但单击 dot 它不会更改页面,因此请帮助更改页面的功能:

- (void)viewDidLoad {
    scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 420)];
    scrollView.delegate = self;
    [self.scrollView setBackgroundColor:[UIColor whiteColor]];
    [scrollView setCanCancelContentTouches:NO];
    scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    scrollView.clipsToBounds = YES;
    scrollView.scrollEnabled = YES;
    [scrollView setShowsHorizontalScrollIndicator:NO];
    scrollView.pagingEnabled = YES;
    [self.view addSubview:scrollView];
    pageControl=[[UIPageControl alloc]initWithFrame:CGRectMake(0, 420, 320, 40)];
    [pageControl addTarget:self action:@selector(changepage:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:pageControl];

    UIView *blueView = [[UIView alloc] init];
    blueView.frame = CGRectMake(0, 0, 640, 480);
    blueView.backgroundColor = [UIColor whiteColor];
    [scrollView addSubview:blueView];
    self.pageControl.numberOfPages = 2;
    [scrollView setContentSize:CGSizeMake(640, 0)];
}

-(void)changepage:(id)sender
{
    int page = pageControl.currentPage;
    if (page < 0)
        return;
    if (page >= 2)
        return;
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    [scrollView scrollRectToVisible:frame animated:YES];

}

- (void)scrollViewDidScroll:(UIScrollView *)_scrollView
{
    if (pageControlIsChangingPage)
        return;
    CGFloat pageWidth = _scrollView.frame.size.width;
    int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    pageControl.currentPage = page;
}

回答by Banker Mittal

You can create one event change page:

您可以创建一个事件更改页面:

- (IBAction)changePage:(id)sender {
    UIPageControl *pager=sender;
    int page = pager.currentPage;
    CGRect frame = imageGrid_scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    [imageGrid_scrollView scrollRectToVisible:frame animated:YES];
}

Bind it to Pagecontrol's value changed event.

将其绑定到 Pagecontrol 的 value changed 事件。

回答by Maulik Patel

This is very useful for pagecontrol dots click action change page index for swift 3and swift 4.

这对于swift 3swift 4 的页面控制点单击操作更改页面索引非常有用。

@IBAction func pageControlSelectionAction(_ sender: UIPageControl) {
    let page: Int? = sender.currentPage
    var frame: CGRect = self.yourcollectionview.frame
    frame.origin.x = frame.size.width * CGFloat(page ?? 0)
    frame.origin.y = 0
    self.yourcollectionview.scrollRectToVisible(frame, animated: true)
}

回答by Fry

Just to complete Banker Mittal's answer, the easiest way to do it in swift is to scroll the wanted rect to visible. You don't have to take care of "left" and "right" scrolling because iOS itself realizes which dot you tapped so you can just scroll to the correct frame:

只是为了完成 Banker Mittal 的回答,最简单的快速完成方法是将想要的矩形滚动到可见。您不必处理“向左”和“向右”滚动,因为 iOS 本身会意识到您点击了哪个点,因此您可以滚动到正确的框架:

private func moveScrollViewToCurrentPage() {

 //You can use your UICollectionView variable too instead of my scrollview variable
            self.scrollView
                .scrollRectToVisible(CGRect(
                    x: Int(self.scrollView.frame.size.width) * self.pager.currentPage,
                    y: 0,
                     width:Int(self.scrollView.frame.size.width),
                    height: Int(self.scrollView.frame.size.height)),
                                     animated: true)

    }

回答by fatihyildizhan

This is a Swift 2Solution for UICollectionView. Clicking the UIPageControl's dotsmoves your current view to the left or to the right.

这是Swift 2解决方案UICollectionView。单击UIPageControl's dots将当前视图向左或向右移动。

// Define bounds
private var currentIndex:Int = 0
private let maxLimit = 25
private let minLimit = 0

// Define @IBAction from UIPageControl
@IBAction func moveViewLeftRight(sender: UIPageControl) {
    // Move to Right
    if currentIndex < maxLimit && sender.currentPage > currentIndex {
        currentIndex++
        self.collectionView.scrollToItemAtIndexPath(NSIndexPath(forItem: currentIndex, inSection: 0), atScrollPosition: .Right, animated: true)
    // Move to Left
    } else if currentIndex > minLimit {
        currentIndex--
        self.collectionView.scrollToItemAtIndexPath(NSIndexPath(forItem: currentIndex, inSection: 0), atScrollPosition: .Left, animated: true)
    }
}