iOS實現圖片自動切換效果
阿新 • • 發佈:2020-02-27
本文例項為大家分享了iOS實現圖片自動切換的具體程式碼,供大家參考,具體內容如下
#import "ViewController.h" #define ImageViewCount 5 @interface ViewController ()<UIScrollViewDelegate> @property (weak,nonatomic) IBOutlet UIScrollView *imageScrollView; @property (weak,nonatomic) IBOutlet UIPageControl *imageViewPageControl; @property (strong,nonatomic) NSTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self addImageView2ScrollView]; self.imageScrollView.contentSize = CGSizeMake(self.imageScrollView.frame.size.width * ImageViewCount,0); self.imageScrollView.delegate = self; self.imageScrollView.pagingEnabled = YES;//UIScrollView支援拖動分頁 self.imageViewPageControl.numberOfPages = ImageViewCount; [self addScrollTimer]; } - (void)rotatePic{ int currentPageIndex = self.imageViewPageControl.currentPage; if(++currentPageIndex == 5){ currentPageIndex = 0; } CGFloat offsetX = currentPageIndex * self.imageScrollView.frame.size.width; [UIView animateWithDuration:1 animations:^{ self.imageScrollView.contentOffset = CGPointMake(offsetX,0); }]; } /**新增圖片到imageScrollView*/ - (void)addImageView2ScrollView{ CGFloat imageWidth = self.imageScrollView.frame.size.width; CGFloat imageHeight = self.imageScrollView.frame.size.height; for(int i = 0;i <= ImageViewCount;i++){ UIImageView *imageInScroll = [[UIImageView alloc] init]; imageInScroll.frame = CGRectMake(i * imageWidth,imageWidth,imageHeight); imageInScroll.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%02d",i + 1]]; [self.imageScrollView addSubview:imageInScroll]; } } // 正滾動時執行 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat offX = self.imageScrollView.contentOffset.x;//(0,0)距離content內部左上頂點的x軸長度 NSLog(@"~~~~~~~%f ^^^^^^%f",offX,self.imageScrollView.frame.size.width); int currentPageIndex = (offX + .5f * self.imageScrollView.frame.size.width) / self.imageScrollView.frame.size.width; self.imageViewPageControl.currentPage = currentPageIndex; } - (void)addScrollTimer{ self.timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(rotatePic) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } - (void)removeScrollTimer{ [self.timer invalidate];//釋放定時器 self.timer = nil; } // 開始準備滾動時執行 移除定時滾動操作 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ NSLog(@"~~~scrollViewWillBeginDragging"); [self removeScrollTimer]; } // 結束滾動後執行 新增定時滾動操作 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ NSLog(@"~~~scrollViewDidEndDragging"); [self addScrollTimer]; } @end
對UIScrollView的運用,以上程式碼中有詳細註釋,需注意2點:
1.注意設定contentSize屬性。其中contentSize表示scroll內容尺寸大小
2.注意設定代理UIScrollViewDelegate,才可呼叫其中的方法
對於定時器NSTimer的運用需注意
1.線上程的loop中新增定時器
2.注意使用完成回收NSTimer
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。