这里我有一个页面控件,效果很好,但点击它不会改变页面,所以请帮助改变页面的功能:
- (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;
}
答案 0 :(得分:60)
您可以创建一个事件更改页面:
- (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];
}
将其绑定到Pagecontrol的值更改事件。
答案 1 :(得分:4)
只是为了完成Banker Mittal的答案,在swift中最简单的方法是将想要的矩形滚动到可见的位置。你不必照顾&#34;离开&#34;和&#34;对&#34;滚动,因为iOS本身会实现您点击的点,因此您可以滚动到正确的帧:
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)
}
答案 2 :(得分:4)
这对于 swift 3 和 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)
}
答案 3 :(得分:2)
这是UICollectionView
的 Swift 2 解决方案。
点击UIPageControl's dots
可将当前视图向左或向右移动。
// 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)
}
}