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

不羁的心 提交于 2019-11-30 05:37:35
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.

This is very useful for pagecontrol dots click action change page index for swift 3 and swift 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)
}
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:

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)

    }

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

// 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)
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!