写了一个简单的iOS App,演示UIScrollView滚动视图和UIPageControl分页控件的简单应用。
本App功能是:在每一页显示不同背景演示的页面。UIScrollView滚动视图和UIPageControl分页控件进行关联,滚动到新的页面时,分页控件也会同步切换到新的页面,反之也如此。
示例App 最终运行界面如下:
开发工具:Xcode 4.5 + iOS 6 模拟器
创建项目ColorScroll,类前缀也设置为ColorScroll,如下图所示。
下面是本示例项目的完整源代码,代码中有比较完整的注释。
ColorScrollViewController.h 头文件代码:
#import <UIKit/UIKit.h>
@interface ColorScrollViewController : UIViewController<UIScrollViewDelegate>// 滚动视图输出口@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;// 分页控件输出口@property (strong, nonatomic) IBOutlet UIPageControl *pageControl;
// 连接分页控件的value changed事件- (IBAction)changePage:(id)sender;
@end
ColorScrollViewController.m 实现文件代码:
#import "ColorScrollViewController.h"
@interface ColorScrollViewController ()
@end
@implementation ColorScrollViewController
- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor],[UIColor greenColor],[UIColor blueColor],[UIColor yellowColor], nil];
self.scrollView.frame = CGRectMake(0, 0, 320, 410);
for (int i=0; i<colors.count; i++) { CGRect frame;frame.origin.x = self.scrollView.frame.size.width *i;frame.origin.y = 0;frame.size = self.scrollView.frame.size;
UIView *subView = [[UIView alloc] initWithFrame:frame];subView.backgroundColor = [colors objectAtIndex:i];[self.scrollView addSubview:subView];}// 设置scroll view的contentSize属性,这个是包含所有页面的scroll view的尺寸self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width*colors.count, self.scrollView.frame.size.height);
// 告诉分页控件-总共有多少页self.pageControl.numberOfPages = colors.count;}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat pageWidth = self.scrollView.frame.size.width;// 在滚动超过页面宽度的50%的时候,切换到新的页面int page = floor((self.scrollView.contentOffset.x + pageWidth/2)/pageWidth) ;self.pageControl.currentPage = page;}
- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}
- (IBAction)changePage:(id)sender { // 更新Scroll View到正确的页面CGRect frame;frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage;frame.origin.y = 0;frame.size = self.scrollView.frame.size;[self.scrollView scrollRectToVisible:frame animated:YES];}@end