簡單的圖片無限輪播器

来源:http://www.cnblogs.com/ljcgood66/archive/2016/04/15/5396557.html
-Advertisement-
Play Games

源文件在這裡:http://pan.baidu.com/s/1kVKrbkb 另外有個好用的三方:http://pan.baidu.com/s/1kUBTsZ9 不行的話,github.com 搜索SDCycleScrollView-master ...


  1 #import "ViewController.h"
  2 #define kDeviceWidth [UIScreen mainScreen].bounds.size.width
  3 #define kDeviceHeight [UIScreen mainScreen].bounds.size.height
  4 #define   Kpage 3
  5 @interface ViewController ()<UIScrollViewDelegate>
  6 
  7 @property(nonatomic,strong)UIPageControl *pageCtrl;
  8 @property (nonatomic,weak) UIScrollView *scrollView;
  9 @property (nonatomic,weak) UIImageView *currentImageView; // 當前imageView
 10 @property (nonatomic,weak) UIImageView *nextImageView; // 下一個imageView
 11 @property (nonatomic,weak) UIImageView *preImageView; //上一個imageView
 12 @property (nonatomic,assign) BOOL isDragging; // 是否正在拖動
 13 @property (nonatomic,strong)NSTimer *timer;
 14 @end
 15 
 16 @implementation ViewController
 17 
 18 - (void)viewDidLoad {
 19     [super viewDidLoad];
 20     UIScrollView *scrollView =[[UIScrollView alloc] init];
 21     scrollView.frame = CGRectMake(0, 0, kDeviceWidth, kDeviceHeight);
 22     [self.view addSubview:scrollView];
 23     self.scrollView = scrollView;
 24     [self.scrollView setContentSize:CGSizeMake(kDeviceWidth * 3, kDeviceWidth)];
 25     //  設置隱藏橫向條
 26     self.scrollView.showsHorizontalScrollIndicator = NO;
 27     //  設置自動分頁
 28     self.scrollView.pagingEnabled = YES;
 29     //  設置代理
 30     self.scrollView.delegate = self;
 31     //  設置當前點
 32     self.scrollView.contentOffset = CGPointMake(kDeviceWidth, 0);
 33     //  設置是否有邊界
 34     self.scrollView.bounces = NO;
 35     //  初始化當前視圖
 36     UIImageView *currentImageView =[[UIImageView alloc] init];
 37     currentImageView.image = [UIImage imageNamed:@"bg_01"];
 38     [self.scrollView addSubview:currentImageView];
 39     self.currentImageView = currentImageView;
 40     self.currentImageView.frame = CGRectMake(kDeviceWidth, 0, kDeviceWidth, kDeviceHeight);
 41     self.currentImageView.contentMode = UIViewContentModeScaleAspectFill;
 42     //  初始化下一個視圖
 43     UIImageView *nextImageView = [[UIImageView alloc] init];
 44     nextImageView.image = [UIImage imageNamed:@"bg_02"];
 45     [self.scrollView addSubview:nextImageView];
 46     self.nextImageView = nextImageView;
 47     self.nextImageView.frame = CGRectMake(kDeviceWidth * 2, 0, kDeviceWidth, kDeviceHeight);
 48     self.nextImageView.contentMode = UIViewContentModeScaleAspectFill;
 49     //  初始化上一個視圖
 50     UIImageView *preImageView =[[UIImageView alloc] init];
 51     preImageView.image = [UIImage imageNamed:@"bg_03"];
 52     preImageView.frame = CGRectMake(0, 0, kDeviceWidth, kDeviceHeight);
 53     [self.scrollView addSubview:preImageView];
 54     self.preImageView = preImageView;
 55     self.preImageView.contentMode =UIViewContentModeScaleAspectFill;
 56 
 57     //  設置時鐘動畫 定時器
 58 
 59     self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(update:) userInfo:nil repeats:YES];
 60     //  將定時器添加到主線程
 61     [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
 62 
 63 }
 64     // 分頁
 65 -(UIPageControl *)pageCtrl{
 66     if (_pageCtrl == nil) {
 67         
 68         //分頁控制項
 69         _pageCtrl = [[UIPageControl alloc]init];
 70         _pageCtrl.numberOfPages = Kpage;
 71         
 72         CGSize size = [_pageCtrl sizeForNumberOfPages:Kpage];
 73         _pageCtrl.bounds = CGRectMake(0, 0, size.width, size.height);
 74         _pageCtrl.center = CGPointMake(self.view.center.x, CGRectGetMaxY(self.scrollView.frame) - 20);
 75         _pageCtrl.pageIndicatorTintColor = [UIColor redColor];
 76         _pageCtrl.currentPageIndicatorTintColor = [UIColor greenColor];
 77         
 78         [self.view addSubview:_pageCtrl];
 79         
 80         
 81     }
 82     return _pageCtrl;
 83 }
 84 
 85 
 86 -(void)updateTimer{
 87     //修改頁號
 88     int page = (self.pageCtrl.currentPage + 1 ) % Kpage;
 89     self.pageCtrl.currentPage = page;
 90   
 91 }
 92 
 93 
 94 - (void)update:(NSTimer *)timer{
 95     //定時移動
 96     
 97     if (_isDragging == YES) {
 98         
 99         return ;
100     }
101     CGPoint offSet = self.scrollView.contentOffset;
102     offSet.x +=offSet.x;
103     
104     [self updateTimer];
105     
106     [self.scrollView setContentOffset:offSet animated:YES];
107     if (offSet.x >= kDeviceWidth *2) {
108         offSet.x = kDeviceWidth;
109     }
110    
111 }
112 #pragma mark - UIScrollViewDelegate
113 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
114 {
115     _isDragging = YES;
116 }
117     //  停止滾動
118 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
119 {
120     _isDragging = NO;
121 
122 }
123 
124     // 開始拖動
125 - (void) scrollViewDidScroll:(UIScrollView *)scrollView{
126     static int i =1; //   當前展示的是第幾張圖片
127     float offset = self.scrollView.contentOffset.x;
128     if (self.nextImageView.image == nil || self.preImageView.image == nil) {
129     //  載入下一個視圖
130     NSString *imageName1 = [NSString stringWithFormat:@"bg_0%d",i == Kpage ? 1:i +1];
131     _nextImageView.image = [UIImage imageNamed:imageName1];
132     // 載入上一個視圖
133     NSString *imageName2 = [NSString stringWithFormat:@"bg_0%d",i==1 ? Kpage :i-1];
134     _preImageView.image = [UIImage imageNamed:imageName2];
135      
136     }
137     if(offset ==0){
138         _currentImageView.image = _preImageView.image;
139         scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
140         _preImageView.image = nil;
141         if (i == 1) {
142         i =Kpage;
143         } else{
144         i-=1;
145         }
146 
147     }
148     if (offset == scrollView.bounds.size.width * 2) {
149         _currentImageView.image = _nextImageView.image;
150         scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
151         _nextImageView.image = nil;
152         if (i == Kpage) {
153         i = 1 ;
154         }else{
155         i +=1 ;
156         }
157       
158     }
159    
160 }
161 
162 
163 @end

源文件在這裡:http://pan.baidu.com/s/1kVKrbkb

另外有個好用的三方:http://pan.baidu.com/s/1kUBTsZ9

不行的話,github.com 搜索SDCycleScrollView-master


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 重載hash與isEqual:方法 前言 NSObject 自帶了hash與isEqual:方法,服務於具有hash表結構的數據結構。NSObject自帶的hash函數相當於hash表中的f(key)函數中的key,這“唯一”的key需要用戶自己產生,至於用什麼演算法由用戶自己決定。 準備 測試 1. ...
  • swift提供了3種主要的集合類型,array,set,dictionary。本節介紹array。 數組是存儲有序的相同類型的集合,相同的值可以多次出現在不同的位置。 註意: swift的Array類型橋接Foundation的NSArray類 數組類型簡單語法 swift數組類型完整寫作Array ...
  • ELF文件的結構如下圖所示: ELF文件由4部分組成,分別是ELF頭(ELF header)、程式頭表(Program header table)、節(Sections)和節頭表(Section header table)。 實際上,一個文件中不一定包含全部這些內容,而且它們的位置也未必如上圖所示這 ...
  • 實現了一個官方的demo:bitmap-plasma(水波紋) 源代碼就在samples文件夾下,可以自己去找。 界面: 建立項目的步驟和配置環境不明白的可以去看:http://www.cnblogs.com/jycboy/p/5393727.html 一、activity代碼: make proj ...
  • 通過廣播接收者,接收到簡訊,對簡訊內容進行判斷,如果為我們指定的值就執行相應的操作 如果簡訊內容是”#*location*#” 就執行,獲取手機位置 如果簡訊內容是”#*alarm*#” 就執行,播放報警音樂 如果簡訊內容是”#*wipedata*#” 就執行,遠程清除數據 如果簡訊內容是”#*lo ...
  • NSObject的hash方法 說明 本示例僅僅演示一個對象什麼時候執行hash方法。 細節 1. 必要的Model類,重載了hash方法用以反映Hash方法是否被調用了 2. 測試 3. 測試 isEqual: 方法執行的時候是否會執行 hash 方法,列印情況裡面是沒有的 4. 用 NSMuta ...
  • 聲明 設計概述 JNI介面函數和指針 載入和鏈接本地方法 解析本地方法名 本地方法的參數 引用Java對象 全局和局部引用 實現局部引用 訪問Java對象 訪問基本類型數組 訪問域和方法 報告編程錯誤 Java異常 異常和錯誤代碼 非同步異常 異常的處理 JNI的類型和數據結構 基本類型 引用類型 域 ...
  • 出現情景 如果一個控制器(ViewController)被導航控制器管理,並且該控制器的第一個子控制項是UIScrollView,系統預設會調節UIScrollView的contentInset UIEdgeInsetsMake(64, 0, 0, 0) // 有導航欄 UIEdgeInsetsMak ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...