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;
}
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.
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)
}
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)
}
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)
}
}