激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Swift - Swift實(shí)現(xiàn)無(wú)限輪播效果

Swift實(shí)現(xiàn)無(wú)限輪播效果

2021-01-03 17:02豆丶漿油條 Swift

這篇文章主要為大家詳細(xì)介紹了Swift無(wú)限輪播效果實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

從今天開(kāi)始,我學(xué)習(xí)的重點(diǎn)開(kāi)始轉(zhuǎn)向Swift,并且會(huì)分享一些自己學(xué)習(xí)的心得體會(huì),今天給大家?guī)?lái)的的是無(wú)限輪播。廣告頁(yè)的無(wú)限輪播是非常常見(jiàn)的一個(gè)功能,大多數(shù)APP都有,大多數(shù)程序員也都實(shí)現(xiàn)過(guò),今天我們用Swift實(shí)現(xiàn)一下。項(xiàng)目地址

圖片切換我們可以選擇的基本控件有兩個(gè)UIScrollView 和 UICollectionView,這次我們選擇UICollectionView;既然是輪播,就會(huì)用到Timer。所以,我們這次主要應(yīng)用的知識(shí)點(diǎn)為UICollectionView 和 Timer;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import UIKit
 
class CycleScrollView: UIView, UICollectionViewDelegate,UICollectionViewDataSource {
 
  var bottomView : UICollectionView?
  var width : CGFloat?
  var height : CGFloat?
  var timer : Timer?
  
  override init(frame: CGRect){
    
    super.init(frame: frame)
    // 1.設(shè)置背景色
    self.backgroundColor = UIColor.clear
    // 2.設(shè)置寬高
    width = self.frame.size.width
    height = self.frame.size.height
    // 3.添加bottomView
    setupBottomView()
    // 4.添加定時(shí)器
    setupTimer()
  }
  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
  
  
  func setupBottomView() {
    
    // 5.設(shè)置collectionView的布局
    let flowLayout = UICollectionViewFlowLayout();
    flowLayout.itemSize = self.bounds.size
    flowLayout.minimumLineSpacing = 0;
    flowLayout.minimumInteritemSpacing = 0;
    flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal;
    bottomView = UICollectionView.init(frame: self.bounds, collectionViewLayout: flowLayout)
    self.addSubview(bottomView!);
    // 6.設(shè)置collectionView的尺寸
    bottomView?.contentSize = CGSize(width:width! * CGFloat(4),height:height!)
    // 7.分頁(yè)
    bottomView?.isPagingEnabled = true
    // 8.去掉滾動(dòng)條
    bottomView?.showsVerticalScrollIndicator = false
    bottomView?.showsHorizontalScrollIndicator = false
    // 9.設(shè)置代理
    bottomView?.delegate = self
    bottomView?.dataSource = self
    // 10.注冊(cè)cell
    bottomView?.register(UICollectionViewCell().classForCoder, forCellWithReuseIdentifier: "ID");
    if #available(iOS 10.0, *) {
      // 11.預(yù)加載
      bottomView?.isPrefetchingEnabled = true
    } else {
      // Fallback on earlier versions
    }
  }
  func setupTimer() {
    // 12.實(shí)例化定時(shí)器
    timer = Timer.init(timeInterval: 2, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true);
    RunLoop.main.add(timer!, forMode: RunLoopMode.defaultRunLoopMode);
 
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
    
      self.timer?.fire();
    }
  }
  func timerAction() {
    
    var contentOffsetX = (self.bottomView?.contentOffset.x)! + self.frame.size.width
    
    if contentOffsetX > self.frame.size.width * 3 {
      // 當(dāng)前視圖顯示的是第三個(gè)的時(shí)候,設(shè)置bottomView的偏移量為0
      self.bottomView?.contentOffset = CGPoint(x:0,y:0)
      contentOffsetX = self.frame.size.width
    }
     self.bottomView?.setContentOffset(CGPoint(x:contentOffsetX,y:0), animated: true)
  }
  // 重寫(xiě)removeFromSuperview方法,用于刪除定時(shí)器,否則定時(shí)器一直存在,浪費(fèi)內(nèi)存
  override func removeFromSuperview() {
    
    timer?.invalidate()
    timer = nil
    super.removeFromSuperview()
  }
  // Mark:UICollectionViewDataSource
  // 設(shè)置Itmes
  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    
    return 4;
  }
  // 設(shè)置cell
  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
    let cell : UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "ID", for: indexPath)
    for view : UIView in cell.contentView.subviews {
      
      view.removeFromSuperview()
    }
    let imageView = UIImageView.init(frame: cell.contentView.bounds)
    if indexPath.row < 3 {
      
      imageView.image = UIImage.init(named: String(indexPath.row))
 
    } else {
      imageView.image = UIImage.init(named: String(0))
    }
    cell.contentView.addSubview(imageView)
    
    return cell;
  }
  // Mark:UICollectionViewDelegate
  // 點(diǎn)擊方法
  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    
    print("您點(diǎn)擊了第 \(indexPath.row == 3 ? 0 : indexPath.row) 個(gè)");
  }
  
}

UICollectionView 和 Timer的用法和OC基本相同。Swift和OC的UI部分應(yīng)該是一致的,因?yàn)榈讓佣际荗penGL。我直接說(shuō)一下區(qū)別:

1.Timer:如果重復(fù),OC是等一個(gè)間隔再執(zhí)行的,Swift是立即執(zhí)行的,所以我用了GCD延時(shí)開(kāi)啟定時(shí)器。

2.Swift 沒(méi)有 CGPointZero。

無(wú)限輪播的原理就是在最后面多添加一個(gè)和第一個(gè)相同的itme。當(dāng)你滑動(dòng)到最后一個(gè)itme時(shí),把UICollectionView的contentOffset置零,繼續(xù)向右活動(dòng)。如果不添加,會(huì)給用戶(hù)一種卡頓的感覺(jué)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/doujiangyoutiao/archive/2017/03/10/6530231.html

延伸 · 閱讀

精彩推薦
  • SwiftSwift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • SwiftSwift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    Stevin的技術(shù)博客12372021-01-13
  • SwiftSwift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類(lèi)似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • Swiftmac git xcrun error active developer path 錯(cuò)誤

    mac git xcrun error active developer path 錯(cuò)誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環(huán)境時(shí),出現(xiàn)了錯(cuò)誤(mac git xcrun error active developer path)的解決辦法,希望對(duì)大家有所幫助...

    Swift教程網(wǎng)2232020-12-16
  • SwiftSwift的74個(gè)常用內(nèi)置函數(shù)介紹

    Swift的74個(gè)常用內(nèi)置函數(shù)介紹

    這篇文章主要介紹了Swift的74個(gè)常用內(nèi)置函數(shù)介紹,這篇文章列舉出了所有的Swift庫(kù)函數(shù),內(nèi)置函數(shù)是指無(wú)需引入任何模塊即可以直接使用的函數(shù),需要的朋友可...

    Swift教程網(wǎng)5802020-12-19
  • Swiftswift where與匹配模式的實(shí)例詳解

    swift where與匹配模式的實(shí)例詳解

    這篇文章主要介紹了swift where與匹配模式的實(shí)例詳解的相關(guān)資料,這里附有簡(jiǎn)單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢(mèng)的魔術(shù)師14382021-01-06
  • SwiftSwift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類(lèi)型和基本語(yǔ)法,例如常量和變量、注釋、分號(hào)、整數(shù)、數(shù)值類(lèi)型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過(guò)來(lái)和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對(duì)Mac開(kāi)發(fā)的影響和對(duì)Objective-C的影響。...

    Swift教程網(wǎng)4412020-12-16
主站蜘蛛池模板: 久久久久国产成人免费精品免费 | 亚洲少妇诱惑 | av在线免费观看网 | 日韩午夜片 | 制服丝袜成人动漫 | 国产成人精品免费视频大全办公室 | 国产精品av久久久久久久久久 | 日韩毛片网 | 草莓福利视频在线观看 | 久久久亚洲高清 | 欧美一级性 | 国产精品久久久久久模特 | 天天夜碰日日摸日日澡性色av | 日本高清黄色片 | 91九色视频在线播放 | 久久免费观看一级毛片 | 中文日韩| 美女在线视频一区二区 | 国产成人强伦免费视频网站 | 99爱精品在线 | 91社| 午夜视频在线观 | 91高清国产| 国产亚洲精品久久久久久久 | 日朝毛片 | 爱操影视| 国产一区二区欧美精品 | 亚洲国产女同久久 | 欧美性生交大片 | 国产精品999在线观看 | 欧美成人午夜 | 久草视频在线资源 | 九一成人 | 日韩黄色精品 | 欧美中文字幕在线视频 | 99麻豆久久久国产精品免费 | 秋霞a级毛片在线看 | 99爱视频| 综合日韩av | 99最新地址 | 亚洲欧洲av在线 |