由于UIPageControl中响应事件并没有像点击的location找indexpath的方法(tableView中是可以的:indexPathForRowAtPoint:CGpoint方法)因此我们在UIPageControl需要自己来实现这种类似方法。
其他初始化不赘述。
首先:
[_pageControl addTarget:self action:@selector(clickPageController:event:) forControlEvents:UIControlEventTouchUpInside];
其次:
- (void)clickPageController:(UIPageControl *)pageController event:(UIEvent *)touchs{
UITouch *touch = [[touchs allTouches] anyObject];
CGPoint p = [touch locationInView:_pageControl];
CGFloat centerX = pageController.center.x;
CGFloat left = centerX-15.0*picNum/2;
[_pageControl setCurrentPage:(int ) (p.x-left)/15];
[_scrollView setContentOffset:CGPointMake(_pageControl.currentPage*DEVICE_WIDTH, 0)];
NSLog(@"%f",(p.x-left)/15);
}
首先拿到UIPageControl的中心,由于UIPageControl继承于UIControl,UIControl继承于UIView,因此有center属性。接着计算最左侧的值,left = centerX-15.0*picNum/2,(picNum是页数)。用event拿到我们点击的位置在_pageControl上的位置,(p.x-left)/15计算点击的位置是第几页,最后调用setCurrentPage方法。然后可以用setContentOffset方法把scrollView转到那个页数。