主要用Xib方式,代码后期还会有进一步的优化
功能:类似于手机打开新浪网首页最上面的大图片,自动滚动,右下角有个页数显示。
思路和注意点:1、主要用到的是scrollView和page control
2、在Xib中布置好控件
3、封装三部曲(首先在自定义构造方法内添加子控件,其次在layoutSubview中添加子控件的尺寸(此方法有随着外部尺寸变化,子控件尺寸比例随
着变化的动能),最后重写setter方法,拿到模型数据)
4、其它细节的设置如:翻页动画,page control小点的颜色变化,单页时候page control自动隐藏等等
使用的主要方法:1、加载Xib的方法:loadNibNamed
2、封装子控件的三步:- (instancetype)initWithFrame:(CGRect)frame{}
- (void)layoutSubviews{}
- (void)setImageNames:(NSArray *)imageNames{}
代码实现:
ZWpageView.h中:
1 #import <UIKit/UIKit.h>
2 @interface ZWpageView : UIView <UIScrollViewDelegate>
3
4 + (instancetype)pageView;
5 /** 图片数据 */
6 @property (strong, nonatomic)NSArray *imageNames;
7 /** 其它圆点颜色 */
8 @property (strong, nonatomic)UIColor *otherColor;
9 /** 当前圆点颜色 */
10 @property (strong, nonatomic)UIColor *currentColor;
11
12 @end
ZWpageView.m中
#import "ZWpageView.h"
@interface ZWpageView()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
/** 定时器 */
@property (strong, nonatomic)NSTimer *timer;
@end
@implementation ZWpageView
#pragma mark - 初始化方法
+ (instancetype)pageView{
return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
}
// 当xib\storyboard创建时,会调用这个方法来初始化控件
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
[self setup];
}
return self;
}
/**
* 当xib\storyboard创建完毕时,会调用这个方法来初始化控件
* 当xib\storyboard创建完毕后的初始化操作,应该在这里面进行
*/
- (void)awakeFromNib
{
[self setup];
}
- (void)setup
{
self.scrollView.backgroundColor = [UIColor blueColor];
//开启定时器
[self startTimer];
}
- (void)layoutSubviews{
[super layoutSubviews];
//设置scrollView的frame
self.scrollView.frame = self.bounds;
CGFloat imageW = self.scrollView.frame.size.width;
CGFloat imageH = self.scrollView.frame.size.height;
//设置pageControl
CGFloat pageW = 100;
CGFloat pageH = 37;
self.pageControl.frame = CGRectMake(imageW - pageW, imageH - pageH, pageW, pageH);
//单页时候pageControl自动隐藏
// self.pageControl.hidesForSinglePage = YES; //xib中可以直接勾上!!!
self.scrollView.contentSize = CGSizeMake(self.imageNames.count * imageW, 0);
for (int i=0; i<self.scrollView.subviews.count; i++) {
UIImageView *imageView = self.scrollView.subviews[i];
imageView.frame = CGRectMake(i * imageW, 0, imageW,imageH);
}
}
#pragma mark - 代理
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
self.pageControl.currentPage = (int)(self.scrollView.contentOffset.x / self.scr