puedo - control por boton iphone
¿Cómo puedo cambiar la página al hacer clic en los puntos de UIPageControl? (3)
Aquí tengo un control de página que funciona bien, pero al hacer clic en el punto no cambia la página, así que por favor ayuda en la función de changepage:
- (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;
}
Esta es una solución Swift 2 para UICollectionView
. Al hacer clic en los UIPageControl''s dots
mueve la vista actual hacia la izquierda o hacia la derecha.
// 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)
}
}
Puede crear una página de cambio de evento:
- (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];
}
Enlace al evento de cambio de valor de Pagecontrol.
Solo para completar la respuesta del Banquero Mittal, la manera más fácil de hacerlo rápido es desplazar el rect deseado a visible. No tiene que ocuparse de desplazarse "a la izquierda" y a la "derecha" porque iOS se da cuenta de qué punto tocó para que pueda desplazarse al marco correcto:
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)
}