主要用Xib方式,代碼後期還會有進一步的優化 下次用代碼的時候一定要複製一份再用,直接拿出源代碼來不小心哪裡碰了下,耽誤了10多分鐘去找bug,鬱悶!!! 功能:類似於手機打開新浪網首頁最上面的大圖片,自動滾動,右下角有個頁數顯示。 思路和註意點:1、主要用到的是scrollView和page co ...
主要用Xib方式,代碼後期還會有進一步的優化
下次用代碼的時候一定要複製一份再用,直接拿出源代碼來不小心哪裡碰了下,耽誤了10多分鐘去找bug,鬱悶!!!
功能:類似於手機打開新浪網首頁最上面的大圖片,自動滾動,右下角有個頁數顯示。
思路和註意點: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.scrollView.frame.size.width + 0.5); } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self stopTimer]; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [self startTimer]; } #pragma mark - 定時器控制 - (void)startTimer { //創建定時器 // NSTimer *timer = [NSTimer timerWithTimeInterval:1.5 target:self selector:@selector(nextPage) userInfo:nil repeats:YES]; // [timer fire]; //這個方法不行,執行一次後就釋放,不會保存 self.timer = [NSTimer scheduledTimerWithTimeInterval:1.1 target:self selector:@selector(nextPage) userInfo:nil repeats:YES]; } - (void)stopTimer { [self.timer invalidate]; self.timer = nil; } - (void)nextPage { NSInteger page = self.pageControl.currentPage + 1; if (page == self.pageControl.numberOfPages) { page = 0; } CGPoint offset = self.scrollView.contentOffset; offset.x = page * self.scrollView.frame.size.width; [self.scrollView setContentOffset:offset animated:YES];//跳轉到你所指定內容的坐標,YES表示跳轉有動畫 } #pragma mark - set方法重寫 - (void)setImageNames:(NSArray *)imageNames{ _imageNames = imageNames; //由於可能用到多次set方法,所以重寫set方法時候應該刪除點之前的set方法內的內容(不要for迴圈刪子控制項) [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; //取出圖片放入到scrollView中 for (int i = 0; i<imageNames.count; i++) { UIImageView *imageView = [[UIImageView alloc] init]; imageView.image = [UIImage imageNamed:imageNames[i]]; [self.scrollView addSubview:imageView]; } //小的細節設置 self.scrollView.showsHorizontalScrollIndicator = NO; self.scrollView.pagingEnabled = YES; self.pageControl.numberOfPages = imageNames.count; } - (void)setOtherColor:(UIColor *)otherColor{ _otherColor = otherColor; self.pageControl.pageIndicatorTintColor = otherColor; } - (void)setCurrentColor:(UIColor *)currentColor{ _currentColor = currentColor; self.pageControl.currentPageIndicatorTintColor = currentColor; } @end