效果
步驟
- 新建xib文件
- 在xib文件中添加UIScrollView及UIPageControl
- 新建類俺附,把xib文件的Custom Class設置為該類
- 在類中創(chuàng)建UIScrollView鸿竖、UIPageControl兩個控件變量和一個數(shù)組著隆,數(shù)組用于存放圖片名稱。
- 新建類方法返回該Xib文件
/**
* 初始化
*
* @return 返回WXPageView
*/
+(instancetype)PageView
{
return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
}
```
6.在數(shù)組變量的set方法中給UIScrollView控件添加圖片皇帮,并且設置UIPageControl的總頁數(shù)(總頁數(shù)即為圖片總數(shù))
```objc
-(void)setImageNames:(NSArray *)imageNames
{
_imageNames = imageNames;
for (int i = 0; i < imageNames.count; i++) {
UIImageView *imageView = [[UIImageView alloc]init];
imageView.image = [UIImage imageNamed:imageNames[i]];
[self.scrollView addSubview:imageView];
}
self.page.numberOfPages = imageNames.count;
}
7.重寫layoutSubviews方法設置xib文件中所有控件的Frame刽严。
-(void)layoutSubviews
{
[super layoutSubviews];//注意不要忘記調用父類的layoutSubviews
for (int i = 0; i<self.scrollView.subviews.count; i++) {
self.scrollView.subviews[i].frame = CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height);
}
self.scrollView.pagingEnabled = YES;
self.scrollView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
// 圖片寬度于scrollview一致寸潦,設置contentSize的X為總頁數(shù)(即圖片總數(shù))乘以scrollview的寬度皇筛。不需要上下滾動琉历,Y為0。
self.scrollView.contentSize = CGSizeMake(self.page.numberOfPages * self.frame.size.width, 0);
// 代理
self.scrollView.delegate = self;
// self.scrollView.frame.size.width / 2 是scrollView的X中心點
// self.scrollView.frame.size.height / 2 是scrollView的Y中心點
// (self.scrollView.frame.size.height / 2) + self.scrollView.frame.size.height / 3 是從Y的中心點算起再加上三分之一的scrollView高度
self.page.frame = CGRectMake((self.scrollView.frame.size.width / 2) - 20, (self.scrollView.frame.size.height / 2) + self.scrollView.frame.size.height / 3, 50, 20);
}
8.實現(xiàn)UIScrollViewDelegate協(xié)議的scrollViewDidScroll方法水醋,監(jiān)聽scrollview的滾動
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//當前頁等于scrollview的contentOffset.x除以scrollview的寬度再四舍五入
int page = self.scrollView.contentOffset.x / self.scrollView.frame.size.width + 0.5;
self.page.currentPage = page;
}
9.最后在用到該自定義控件的時候如下方法調用
PageView *page = [PageView PageView];
//只傳圖片名稱
page.imageNames = @[@"img_00",@"img_01",@"img_02",@"img_03",@"img_04"];
page.frame = CGRectMake(20, 100, 374, 157);
[self.view addSubview:page];
現(xiàn)存問題:自定義控件中的UIPageControl位置沒想到太好的辦法調整旗笔,如果設置的寬度太高下面留余太多。
2016-3-31更新解決UIPageControl位置問題拄踪,改變計算位置方法如下
// 獲得scrollview的尺寸
CGFloat scrollW = self.scrollView.frame.size.width;
CGFloat scrollH = self.scrollView.frame.size.height;
// 設置pageControl
CGFloat pageW = 150;
CGFloat pageH = 40;
CGFloat pageX = scrollW - pageW;
CGFloat pageY = scrollH - pageH;
self.page.frame = CGRectMake(pageX, pageY, pageW, pageH);