web-dev-qa-db-fra.com

Comment puis-je changer la page en cliquant sur les points d'UIPageControl

Ici, j'ai un pagecontrol qui fonctionne bien, mais en cliquant sur le point, cela ne change pas la page, alors aidez-moi dans la fonction de changement de page:

- (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;
}
37
Vivek Sehrawat

Vous pouvez créer une page de changement d'événement:

- (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];
}

Liez-le à l'événement de modification de la valeur de Pagecontrol.

60
Banker Mittal

Ceci est très utile pour l'index de page de changement d'action de clic de points pagecontrol pour Swift 3 et 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)
}
5
Maulik Patel

Juste pour compléter la réponse du banquier Mittal, la façon la plus simple de le faire dans Swift est de faire défiler le recto voulu pour le voir. Vous n'avez pas à vous occuper du défilement "gauche" et "droite" car iOS lui-même se rend compte du point que vous avez tapé afin que vous puissiez simplement faire défiler jusqu'au cadre correct:

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)

    }
4
Fry

Ceci est une solution Swift 2 pour UICollectionView. Cliquez sur UIPageControl's dots déplace votre vue actuelle vers la gauche ou vers la droite.

// 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)
    }
}
2
fatihyildizhan