浏览代码

首页自动轮播

刘千军 11 月之前
父节点
当前提交
dea3770376
共有 38 个文件被更改,包括 3693 次插入1988 次删除
  1. 47 111
      Koala/Koala/Modular/Home/V/HomeIndexCell.swift
  2. 0 27
      Koala/Koala/Modular/Home/V/HomeIndexCell.xib
  3. 40 131
      Koala/Koala/Modular/Home/V/HomeOptionsCell.swift
  4. 0 17
      Koala/Koala/Modular/Home/V/HomeOptionsCell.xib
  5. 1 1
      Koala/Koala/Modular/Home/V/HomeView.swift
  6. 1 0
      Koala/Podfile
  7. 5 1
      Koala/Podfile.lock
  8. 5 1
      Koala/Pods/Manifest.lock
  9. 1711 1681
      Koala/Pods/Pods.xcodeproj/project.pbxproj
  10. 58 0
      Koala/Pods/Pods.xcodeproj/xcuserdata/liuqianjun.xcuserdatad/xcschemes/TYCyclePagerView.xcscheme
  11. 21 0
      Koala/Pods/TYCyclePagerView/LICENSE
  12. 141 0
      Koala/Pods/TYCyclePagerView/README.md
  13. 74 0
      Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.h
  14. 300 0
      Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.m
  15. 180 0
      Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.h
  16. 607 0
      Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.m
  17. 47 0
      Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.h
  18. 285 0
      Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.m
  19. 25 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-acknowledgements.markdown
  20. 31 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-acknowledgements.plist
  21. 1 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Debug-input-files.xcfilelist
  22. 1 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Debug-output-files.xcfilelist
  23. 1 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Release-input-files.xcfilelist
  24. 1 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Release-output-files.xcfilelist
  25. 2 0
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks.sh
  26. 3 3
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala.debug.xcconfig
  27. 3 3
      Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala.release.xcconfig
  28. 3 3
      Koala/Pods/Target Support Files/Pods-KoalaTests/Pods-KoalaTests.debug.xcconfig
  29. 3 3
      Koala/Pods/Target Support Files/Pods-KoalaTests/Pods-KoalaTests.release.xcconfig
  30. 3 3
      Koala/Pods/Target Support Files/Pods-KoalaUITests/Pods-KoalaUITests.debug.xcconfig
  31. 3 3
      Koala/Pods/Target Support Files/Pods-KoalaUITests/Pods-KoalaUITests.release.xcconfig
  32. 26 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-Info.plist
  33. 5 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-dummy.m
  34. 12 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-prefix.pch
  35. 19 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-umbrella.h
  36. 11 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView.debug.xcconfig
  37. 6 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView.modulemap
  38. 11 0
      Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView.release.xcconfig

+ 47 - 111
Koala/Koala/Modular/Home/V/HomeIndexCell.swift

@@ -7,40 +7,38 @@
 //
 
 import UIKit
-
+import TYCyclePagerView
 class HomeIndexCell: BaseTableViewCell {
-    @IBOutlet weak var collectionView: UICollectionView!
     
     lazy var listData:[KSymbolModel] = {
         let arr:[KSymbolModel] = [KSymbolModel]()
         return arr
     }()
     
-    /// 轮播时间
-    var time: TimeInterval = 2
-    {
-        didSet{
-            startTimer()
-        }
-    }
-    
-    var timer: Timer?
+    lazy var pagerView:TYCyclePagerView = {
+        let view:TYCyclePagerView = TYCyclePagerView()
+     
+        view.isInfiniteLoop = true
+        view.autoScrollInterval = 3
+        view.layout.layoutType = .normal
+        view.layout.itemSpacing = 10
+        view.setNeedsLayout()
+        view.dataSource = self
+        view.delegate = self
+        view.register(UINib.init(nibName: "HomeIndexListCell", bundle: nil), forCellWithReuseIdentifier: "HomeIndexListCell")
+        
+        return view
+    }()
     
     override func awakeFromNib() {
         super.awakeFromNib()
         self.backgroundColor = .clear
-        
-        let layout = UICollectionViewFlowLayout.init()
-        layout.scrollDirection = UICollectionView.ScrollDirection.horizontal
-        layout.minimumInteritemSpacing = 0
-        layout.minimumLineSpacing = 10
-        collectionView.setCollectionViewLayout(layout, animated: true)
-        collectionView.delegate = self
-        collectionView.dataSource = self
-        collectionView.showsVerticalScrollIndicator = false
-        collectionView.showsHorizontalScrollIndicator = false
-        collectionView.backgroundColor = UIColor.clear
-        collectionView.register(UINib.init(nibName: "HomeIndexListCell", bundle: nil), forCellWithReuseIdentifier: "HomeIndexListCell")
+    
+        self.addSubview(self.pagerView)
+        self.pagerView.snp.makeConstraints { make in
+            make.top.left.equalTo(10)
+            make.right.bottom.equalTo(-10)
+        }
         
         
     }
@@ -58,107 +56,45 @@ class HomeIndexCell: BaseTableViewCell {
     func updateCellDataWith(list:[KSymbolModel]) -> Void {
         listData.removeAll()
         self.listData = list
-        self.collectionView.reloadData()
-        startTimer()
+    
+        self.pagerView.reloadData()
     }
     
 }
 
-extension HomeIndexCell : UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource{
-    func numberOfSections(in collectionView: UICollectionView) -> Int {
-          return 100
-      }
-    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+extension HomeIndexCell :TYCyclePagerViewDataSource, TYCyclePagerViewDelegate{
+   
+    func numberOfItems(in pageView: TYCyclePagerView) -> Int {
         return self.listData.count
     }
     
-    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-        
-        let cell:HomeIndexListCell = collectionView.dequeueReusableCell(withReuseIdentifier: "HomeIndexListCell", for: indexPath) as! HomeIndexListCell
-        cell.updateCellDataWith(model: self.listData[indexPath.row])
-        return cell
+    func layout(for pageView: TYCyclePagerView) -> TYCyclePagerViewLayout {
+        let layout = TYCyclePagerViewLayout.init()
+        layout.itemSize = CGSize(width: (SCREEN_WIDTH-40)/3, height: self.frame.height-20)
+        layout.itemSpacing = 10
+        layout.layoutType = .normal
+        layout.itemVerticalCenter = true
+        layout.itemHorizontalCenter = true
+        return layout;
     }
     
-    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
-        return CGSize(width: (SCREEN_WIDTH)/3, height: collectionView.frame.height)
-    }
-    
-    
-    
-    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-        
-        
-    }
-    
-    //MARK: -UIScrollViewDelegate
-    // 停止拖拽的时候开始执行
-    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
-        endTimer()
-    }
-    
-    // 停止拖拽的时候开始执行
-    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
-        startTimer()
-    }
-    
-    // 手指离开减速停止的时候开始执行
-    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
-        //暂不做处理
-    }
-    
-    //在这个方法中算出当前页数
-    func scrollViewDidScroll(_ scrollView: UIScrollView) {
-        let page = Int((scrollView.contentOffset.x + (collectionView.bounds.width) * 0.5) / (collectionView.bounds.width))
-        let currentPage = page % (self.listData.count)
-      
-        
-        //起始位置和最终位置的切换
-        if scrollView.contentOffset.x >= (CGFloat)((self.listData.count) * 100 - 3) * SCREEN_WIDTH || scrollView.contentOffset.x <= 2{
-            collectionView.scrollToItem(at: IndexPath(item: currentPage, section: 100/2), at: .left, animated: false)
-        }
+    func pagerView(_ pagerView: TYCyclePagerView, cellForItemAt index: Int) -> UICollectionViewCell {
+        let cell:HomeIndexListCell = pagerView.dequeueReusableCell(withReuseIdentifier: "HomeIndexListCell", for: index) as! HomeIndexListCell
+        cell.updateCellDataWith(model: self.listData[index])
+        return cell
     }
     
-}
-extension HomeIndexCell{
-    /// 开始定时器
-    func startTimer(){
+    func pagerView(_ pageView: TYCyclePagerView, didScrollFrom fromIndex: Int, to toIndex: Int) {
         
-//        //如果只有一张图片,则直接返回,不开启定时器
-//        if self.listData.count > 0 {
-//            return
-//        }
-//        //如果定时器已开启,先停止再重新开启
-//        if (timer != nil) {
-//            endTimer()
-//        }
-//
-//        timer = Timer.init(timeInterval: time, target: self, selector: #selector(nextPageView), userInfo: nil, repeats: true)
-//        RunLoop.current.add(timer!, forMode:.common)
     }
     
-    /// 停止定时器
-    func endTimer(){
-//        timer?.invalidate()
-//        timer = nil
+    func pagerView(_ pageView: TYCyclePagerView, didSelectedItemCell cell: UICollectionViewCell, at index: Int) {
+        let model = self.listData[index]
+        let vc = MarketDetailViewController()
+        vc.symbolModel = model
+        currentVc()?.navigationController?.pushViewController(vc, animated: true)
     }
-    
-    //MARK: -进入下一页
-    @objc func nextPageView()
-    {
-        //获取当前indexPath
-        let currentIndexPath = collectionView.indexPathsForVisibleItems.last!
-        //获取中间那一组的indexPath
-        let middleIndexPath = IndexPath(item: currentIndexPath.item, section: 100/2)
-        //滚动到中间那一组
-        collectionView.scrollToItem(at: middleIndexPath, at: .left, animated: false)
-        
-        var nextItem = middleIndexPath.item + 1
-        var nextSection = middleIndexPath.section
-        if nextItem == self.listData.count {
-            nextItem = 0
-            nextSection += 1
-        }
-        collectionView.scrollToItem(at: IndexPath(item: nextItem, section: nextSection), at: .left, animated: true)
-    }
-    
+  
 }
+
+   

+ 0 - 27
Koala/Koala/Modular/Home/V/HomeIndexCell.xib

@@ -5,7 +5,6 @@
         <deployment identifier="iOS"/>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -17,35 +16,9 @@
             <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
                 <rect key="frame" x="0.0" y="0.0" width="395" height="138"/>
                 <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="GYf-GB-319">
-                        <rect key="frame" x="10" y="10" width="375" height="118"/>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                        <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="up3-aP-SZr">
-                            <size key="itemSize" width="128" height="128"/>
-                            <size key="headerReferenceSize" width="0.0" height="0.0"/>
-                            <size key="footerReferenceSize" width="0.0" height="0.0"/>
-                            <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
-                        </collectionViewFlowLayout>
-                    </collectionView>
-                </subviews>
-                <constraints>
-                    <constraint firstAttribute="trailing" secondItem="GYf-GB-319" secondAttribute="trailing" constant="10" id="9Th-Xn-t8D"/>
-                    <constraint firstItem="GYf-GB-319" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="10" id="9ui-ce-7P8"/>
-                    <constraint firstAttribute="bottom" secondItem="GYf-GB-319" secondAttribute="bottom" constant="10" id="D2D-dI-Zhe"/>
-                    <constraint firstItem="GYf-GB-319" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="10" id="mLb-P4-i22"/>
-                </constraints>
             </tableViewCellContentView>
             <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
-            <connections>
-                <outlet property="collectionView" destination="GYf-GB-319" id="zDm-tY-Y5Q"/>
-            </connections>
             <point key="canvasLocation" x="149" y="54"/>
         </tableViewCell>
     </objects>
-    <resources>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
-    </resources>
 </document>

+ 40 - 131
Koala/Koala/Modular/Home/V/HomeOptionsCell.swift

@@ -7,7 +7,7 @@
 //
 
 import UIKit
-
+import TYCyclePagerView
 class HomeOptionsCell: BaseTableViewCell {
     @IBOutlet weak var bgView: UIView!
     
@@ -24,32 +24,24 @@ class HomeOptionsCell: BaseTableViewCell {
    
     
     @IBOutlet weak var listBgView: UIView!
-    @IBOutlet weak var collectionView: UICollectionView!
     @IBOutlet weak var more1Btn: UIButton!
     
     var listData:[[OptionsListModel]] = [[OptionsListModel]]()
-    /// 轮播时间
-    var time: TimeInterval = 4
-    {
-        didSet{
-            startTimer()
-        }
-    }
-    
-    var timer: Timer?
-    
-    lazy var pictureView:JCyclePictureView = {
-        let pictureView: JCyclePictureView = JCyclePictureView(frame: CGRect(x: 0, y:0, width: self.frame.width, height:300), pictures: nil)
-        pictureView.direction = .right
-        pictureView.autoScrollDelay = 5
-        pictureView.didTapAtIndexHandle = { index in
-            
-        }
-        
-      
-        return pictureView
-    }()
   
+    lazy var pagerView:TYCyclePagerView = {
+        let view:TYCyclePagerView = TYCyclePagerView()
+     
+        view.isInfiniteLoop = true
+        view.autoScrollInterval = 3
+        view.layout.layoutType = .normal
+        view.layout.itemSpacing = 0
+        view.setNeedsLayout()
+        view.dataSource = self
+        view.delegate = self
+        view.register(UINib.init(nibName: "HomeOptionsListCell", bundle: nil), forCellWithReuseIdentifier: "HomeOptionsListCell")
+        
+        return view
+    }()
 
     override func awakeFromNib() {
         super.awakeFromNib()
@@ -72,20 +64,11 @@ class HomeOptionsCell: BaseTableViewCell {
         self.moreBtn.addTarget(self, action: #selector(clickMoreBtnAction), for: .touchUpInside)
         self.more1Btn.addTarget(self, action: #selector(clickMoreBtnAction), for: .touchUpInside)
 
-        //self.listBgView.addSubview(self.pictureView)
-        
-        let layout = UICollectionViewFlowLayout.init()
-        layout.scrollDirection = UICollectionView.ScrollDirection.horizontal
-        layout.minimumInteritemSpacing = 0
-        layout.minimumLineSpacing = 0
-        collectionView.setCollectionViewLayout(layout, animated: true)
-        collectionView.delegate = self
-        collectionView.dataSource = self
-        collectionView.isPagingEnabled = true
-        collectionView.showsVerticalScrollIndicator = false
-        collectionView.showsHorizontalScrollIndicator = false
-        collectionView.backgroundColor = UIColor.clear
-        collectionView.register(UINib.init(nibName: "HomeOptionsListCell", bundle: nil), forCellWithReuseIdentifier: "HomeOptionsListCell")
+        self.listBgView.addSubview(self.pagerView)
+        self.pagerView.snp.makeConstraints { make in
+            make.edges.equalTo(0)
+        }
+      
         
         mySwitchLanguage()
         mySwitchColor()
@@ -130,9 +113,8 @@ class HomeOptionsCell: BaseTableViewCell {
     func updateCellWith(list:[OptionsListModel]) -> Void {
         self.listData = self.convertToTwoDArrayFrom(oneDArray: list, rawCount: 5)
       
-        self.collectionView.reloadData()
-        self.startTimer()
-       // self.pictureView.collectionView.reloadData()
+        self.pagerView.reloadData()
+      
     }
     
     @objc func clickMoreBtnAction(){
@@ -159,108 +141,35 @@ class HomeOptionsCell: BaseTableViewCell {
     
 }
 
-extension HomeOptionsCell : UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource{
-    func numberOfSections(in collectionView: UICollectionView) -> Int {
-          return 100
-      }
-    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+extension HomeOptionsCell :TYCyclePagerViewDataSource, TYCyclePagerViewDelegate{
+   
+    func numberOfItems(in pageView: TYCyclePagerView) -> Int {
         return self.listData.count
     }
     
-    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-        
-        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HomeOptionsListCell", for: indexPath) as! HomeOptionsListCell
-        if self.listData.count == 0{
-            return cell
-        }
-        cell.updateCellWith(list:self.listData[indexPath.row])
-        return cell
-        
-    }
-    
-    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
-        return CGSize(width: (SCREEN_WIDTH-20), height: collectionView.frame.height)
+    func layout(for pageView: TYCyclePagerView) -> TYCyclePagerViewLayout {
+        let layout = TYCyclePagerViewLayout.init()
+        layout.itemSize = CGSize(width: SCREEN_WIDTH-20, height: self.listBgView.frame.height)
+        layout.itemSpacing = 0
+        layout.layoutType = .normal
+        layout.itemVerticalCenter = true
+        layout.itemHorizontalCenter = true
+        return layout;
     }
     
-    
-    
-    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-        
+    func pagerView(_ pagerView: TYCyclePagerView, cellForItemAt index: Int) -> UICollectionViewCell {
+        let cell:HomeOptionsListCell = pagerView.dequeueReusableCell(withReuseIdentifier: "HomeOptionsListCell", for: index) as! HomeOptionsListCell
+        cell.updateCellWith(list: self.listData[index])
         
+        return cell
     }
     
-    //MARK: -UIScrollViewDelegate
-    // 停止拖拽的时候开始执行
-    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
-        endTimer()
-    }
-    
-    // 停止拖拽的时候开始执行
-    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
-        startTimer()
-    }
-    
-    // 手指离开减速停止的时候开始执行
-    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
-        //暂不做处理
-    }
-    
-    //在这个方法中算出当前页数
-    func scrollViewDidScroll(_ scrollView: UIScrollView) {
-        let page = Int((scrollView.contentOffset.x + (collectionView.bounds.width) * 0.5) / (collectionView.bounds.width))
-        let currentPage = page % (self.listData.count)
-      
-        
-        //起始位置和最终位置的切换
-        if scrollView.contentOffset.x >= (CGFloat)((self.listData.count) * 100 - 3) * SCREEN_WIDTH || scrollView.contentOffset.x <= 2{
-            collectionView.scrollToItem(at: IndexPath(item: currentPage, section: 100/2), at: .left, animated: false)
-        }
-    }
-    
-}
-
-extension HomeOptionsCell{
-    /// 开始定时器
-    func startTimer(){
-        
-        //如果只有一张图片,则直接返回,不开启定时器
-        if self.listData.count < 3 {
-            return
-        }
-        //如果定时器已开启,先停止再重新开启
-        if (timer != nil) {
-            endTimer()
-        }
+    func pagerView(_ pageView: TYCyclePagerView, didScrollFrom fromIndex: Int, to toIndex: Int) {
         
-        timer = Timer.init(timeInterval: time, target: self, selector: #selector(nextPageView), userInfo: nil, repeats: true)
-        RunLoop.current.add(timer!, forMode:.common)
     }
     
-    /// 停止定时器
-    func endTimer(){
-        timer?.invalidate()
-        timer = nil
-    }
+    func pagerView(_ pageView: TYCyclePagerView, didSelectedItemCell cell: UICollectionViewCell, at index: Int) {
     
-    //MARK: -进入下一页
-    @objc func nextPageView()
-    {
-        //获取当前indexPath
-        let currentIndexPath = collectionView.indexPathsForVisibleItems.last!
-        //获取中间那一组的indexPath
-        let middleIndexPath = IndexPath(item: currentIndexPath.item, section: 100/2)
-        //滚动到中间那一组
-        collectionView.scrollToItem(at: middleIndexPath, at: .left, animated: false)
-        
-        var nextItem = middleIndexPath.item + 1
-        var nextSection = middleIndexPath.section
-        if nextItem == self.listData.count {
-            nextItem = 0
-            nextSection += 1
-        }
-        collectionView.scrollToItem(at: IndexPath(item: nextItem, section: nextSection), at: .left, animated: true)
     }
-    
+  
 }
-
-

+ 0 - 17
Koala/Koala/Modular/Home/V/HomeOptionsCell.xib

@@ -111,25 +111,9 @@
                                     </view>
                                     <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DBq-oa-PpC">
                                         <rect key="frame" x="0.0" y="70" width="437" height="324"/>
-                                        <subviews>
-                                            <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="DIx-64-QeQ">
-                                                <rect key="frame" x="0.0" y="98" width="437" height="128"/>
-                                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                                                <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="sft-6l-0oK">
-                                                    <size key="itemSize" width="128" height="128"/>
-                                                    <size key="headerReferenceSize" width="0.0" height="0.0"/>
-                                                    <size key="footerReferenceSize" width="0.0" height="0.0"/>
-                                                    <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
-                                                </collectionViewFlowLayout>
-                                            </collectionView>
-                                        </subviews>
                                         <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                         <constraints>
-                                            <constraint firstAttribute="trailing" secondItem="DIx-64-QeQ" secondAttribute="trailing" id="5GE-56-riv"/>
-                                            <constraint firstAttribute="bottom" secondItem="DIx-64-QeQ" secondAttribute="bottom" id="6nh-p7-JQm"/>
                                             <constraint firstAttribute="height" constant="300" id="F5J-my-kf7"/>
-                                            <constraint firstItem="DIx-64-QeQ" firstAttribute="leading" secondItem="DBq-oa-PpC" secondAttribute="leading" id="FZJ-Eh-lxx"/>
-                                            <constraint firstItem="DIx-64-QeQ" firstAttribute="top" secondItem="DBq-oa-PpC" secondAttribute="top" id="z1d-H9-WWk"/>
                                         </constraints>
                                     </view>
                                     <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zFb-3J-ZRx">
@@ -178,7 +162,6 @@
             </tableViewCellContentView>
             <connections>
                 <outlet property="bgView" destination="y6Y-Bs-egr" id="uy1-Bs-xse"/>
-                <outlet property="collectionView" destination="DIx-64-QeQ" id="bYL-da-OfY"/>
                 <outlet property="imgView" destination="M1O-cz-4Nq" id="ByR-aI-ug5"/>
                 <outlet property="lab1" destination="0Cm-f4-gQ9" id="Vj1-zC-wWj"/>
                 <outlet property="lab2" destination="rav-Cu-2z8" id="xsR-HB-i49"/>

+ 1 - 1
Koala/Koala/Modular/Home/V/HomeView.swift

@@ -145,7 +145,7 @@ class HomeView: BaseView {
     }
     
     func updateSocketCellData() -> Void {
-        if let cell:JDHomeExponentCell = self.tableView.cellForRow(at: IndexPath(row: 0, section: 1)) as? JDHomeExponentCell{
+        if let cell:HomeIndexCell = self.tableView.cellForRow(at: IndexPath(row: 0, section: 1)) as? HomeIndexCell{
             cell.updateCellDataWith(list: self.VM!.symbolList)
         }
     }

+ 1 - 0
Koala/Podfile

@@ -27,6 +27,7 @@ pod 'SwiftSVG'
 pod 'Starscream'
 pod 'LiveChat'
 pod 'PGDatePicker'
+pod 'TYCyclePagerView'
 target 'KoalaTests' do
     inherit! :search_paths
     # Pods for testing

+ 5 - 1
Koala/Podfile.lock

@@ -28,6 +28,7 @@ PODS:
   - SVProgressHUD (2.2.5)
   - SwiftSVG (2.3.2)
   - SwiftyJSON (5.0.0)
+  - TYCyclePagerView (1.2.0)
 
 DEPENDENCIES:
   - Alamofire
@@ -50,6 +51,7 @@ DEPENDENCIES:
   - SVProgressHUD
   - SwiftSVG
   - SwiftyJSON
+  - TYCyclePagerView
 
 SPEC REPOS:
   https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
@@ -75,6 +77,7 @@ SPEC REPOS:
     - SVProgressHUD
     - SwiftSVG
     - SwiftyJSON
+    - TYCyclePagerView
 
 SPEC CHECKSUMS:
   Alamofire: 3ba7a4db18b4f62c4a1c0e1cb39d7f3d52e10ada
@@ -99,7 +102,8 @@ SPEC CHECKSUMS:
   SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
   SwiftSVG: ca7f64e403b8ea7ea8eba8c823b83ba4a059834c
   SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7
+  TYCyclePagerView: 2b051dade0615c70784aa34f40c646feeddb7344
 
-PODFILE CHECKSUM: 4492f90ab6b570954edceaa25f8455075dc45a6f
+PODFILE CHECKSUM: 4ea47789af9c1fd040eb17de1ece382f07f8eaf1
 
 COCOAPODS: 1.11.3

+ 5 - 1
Koala/Pods/Manifest.lock

@@ -28,6 +28,7 @@ PODS:
   - SVProgressHUD (2.2.5)
   - SwiftSVG (2.3.2)
   - SwiftyJSON (5.0.0)
+  - TYCyclePagerView (1.2.0)
 
 DEPENDENCIES:
   - Alamofire
@@ -50,6 +51,7 @@ DEPENDENCIES:
   - SVProgressHUD
   - SwiftSVG
   - SwiftyJSON
+  - TYCyclePagerView
 
 SPEC REPOS:
   https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
@@ -75,6 +77,7 @@ SPEC REPOS:
     - SVProgressHUD
     - SwiftSVG
     - SwiftyJSON
+    - TYCyclePagerView
 
 SPEC CHECKSUMS:
   Alamofire: 3ba7a4db18b4f62c4a1c0e1cb39d7f3d52e10ada
@@ -99,7 +102,8 @@ SPEC CHECKSUMS:
   SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
   SwiftSVG: ca7f64e403b8ea7ea8eba8c823b83ba4a059834c
   SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7
+  TYCyclePagerView: 2b051dade0615c70784aa34f40c646feeddb7344
 
-PODFILE CHECKSUM: 4492f90ab6b570954edceaa25f8455075dc45a6f
+PODFILE CHECKSUM: 4ea47789af9c1fd040eb17de1ece382f07f8eaf1
 
 COCOAPODS: 1.11.3

文件差异内容过多而无法显示
+ 1711 - 1681
Koala/Pods/Pods.xcodeproj/project.pbxproj


+ 58 - 0
Koala/Pods/Pods.xcodeproj/xcuserdata/liuqianjun.xcuserdatad/xcschemes/TYCyclePagerView.xcscheme

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1300"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "416BCB647D16D0ED89A6729B14DD54D2"
+               BuildableName = "TYCyclePagerView.framework"
+               BlueprintName = "TYCyclePagerView"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 21 - 0
Koala/Pods/TYCyclePagerView/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 yeBlueColor
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 141 - 0
Koala/Pods/TYCyclePagerView/README.md

@@ -0,0 +1,141 @@
+# TYCyclePagerView
+a simple and usefull cycle pager view ,and auto scroll banner view ,include pageControl for iOS,support Objective-C and swift.this has been used in APP.
+
+## CocoaPods
+```
+pod 'TYCyclePagerView'
+```
+
+## Requirements
+* Xcode 8 or higher
+* iOS 7.0 or higher
+* ARC
+
+### ScreenShot
+
+![image](https://github.com/12207480/TYCyclePagerView/blob/master/ScreenShot/TYCyclePagerView.gif)
+
+## API
+
+*  DataSource and Delegate 
+```objc
+
+@protocol TYCyclePagerViewDataSource <NSObject>
+
+- (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView;
+
+- (__kindof UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index;
+
+/**
+ return pagerView layout,and cache layout
+ */
+- (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView;
+
+@protocol TYCyclePagerViewDelegate <NSObject>
+
+@optional
+
+/**
+ pagerView did scroll to new index page
+ */
+- (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex;
+
+/**
+ pagerView did selected item cell
+ */
+- (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndex:(NSInteger)index;
+
+// More API see project
+```
+
+* Class
+
+```objc
+
+@interface TYCyclePagerView : UIView
+
+// will be automatically resized to track the size of the pagerView
+@property (nonatomic, strong, nullable) UIView *backgroundView; 
+
+@property (nonatomic, weak, nullable) id<TYCyclePagerViewDataSource> dataSource;
+@property (nonatomic, weak, nullable) id<TYCyclePagerViewDelegate> delegate;
+
+// pager view layout is important
+@property (nonatomic, strong, readonly) TYCyclePagerViewLayout *layout;
+
+/**
+ is infinite cycle pageview
+ */
+@property (nonatomic, assign) BOOL isInfiniteLoop;
+
+/**
+ pagerView automatic scroll time interval, default 0,disable automatic
+ */
+@property (nonatomic, assign) CGFloat autoScrollInterval;
+
+
+@interface TYCyclePagerViewLayout : NSObject
+
+@property (nonatomic, assign) CGSize itemSize;
+@property (nonatomic, assign) CGFloat itemSpacing;
+@property (nonatomic, assign) UIEdgeInsets sectionInset;
+
+@property (nonatomic, assign) TYCyclePagerTransformLayoutType layoutType;
+
+@property (nonatomic, assign) CGFloat minimumScale; // sacle default 0.8
+@property (nonatomic, assign) CGFloat minimumAlpha; // alpha default 1.0
+@property (nonatomic, assign) CGFloat maximumAngle; // angle is % default 0.2
+
+
+@interface TYPageControl : UIControl
+
+@property (nonatomic, assign) NSInteger numberOfPages;          // default is 0
+@property (nonatomic, assign) NSInteger currentPage;            // default is 0. value pinned to 0..numberOfPages-1
+
+// indicatorTint color
+@property (nullable, nonatomic,strong) UIColor *pageIndicatorTintColor;
+@property (nullable, nonatomic,strong) UIColor *currentPageIndicatorTintColor;
+
+// indicator image
+@property (nullable, nonatomic,strong) UIImage *pageIndicatorImage;
+@property (nullable, nonatomic,strong) UIImage *currentPageIndicatorImage;
+```
+
+## Usage
+
+```objc
+
+- (void)addPagerView {
+    TYCyclePagerView *pagerView = [[TYCyclePagerView alloc]init];
+    pagerView.layer.borderWidth = 1;
+    pagerView.isInfiniteLoop = YES;
+    pagerView.autoScrollInterval = 3.0;
+    pagerView.dataSource = self;
+    pagerView.delegate = self;
+    // registerClass or registerNib
+    [pagerView registerClass:[TYCyclePagerViewCell class] forCellWithReuseIdentifier:@"cellId"];
+    [self.view addSubview:pagerView];
+    _pagerView = pagerView;
+}
+
+- (void)addPageControl {
+    TYPageControl *pageControl = [[TYPageControl alloc]init];
+    //pageControl.numberOfPages = _datas.count;
+    pageControl.currentPageIndicatorSize = CGSizeMake(8, 8);
+//    pageControl.pageIndicatorImage = [UIImage imageNamed:@"Dot"];
+//    pageControl.currentPageIndicatorImage = [UIImage imageNamed:@"DotSelected"];
+//    [pageControl addTarget:self action:@selector(pageControlValueChangeAction:) forControlEvents:UIControlEventValueChanged];
+    [_pagerView addSubview:pageControl];
+    _pageControl = pageControl;
+}
+- (void)loadData {
+    // load data to _datas
+    _pageControl.numberOfPages = _datas.count;
+    [_pagerView reloadData];
+}
+
+```
+
+### Contact
+如果你发现bug,please pull reqeust me <br>
+如果你有更好的改进,please pull reqeust me <br>

+ 74 - 0
Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.h

@@ -0,0 +1,74 @@
+//
+//  TYCyclePagerViewLayout.h
+//  TYCyclePagerViewDemo
+//
+//  Created by tany on 2017/6/19.
+//  Copyright © 2017年 tany. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSUInteger, TYCyclePagerTransformLayoutType) {
+    TYCyclePagerTransformLayoutNormal,
+    TYCyclePagerTransformLayoutLinear,
+    TYCyclePagerTransformLayoutCoverflow,
+};
+
+@class TYCyclePagerTransformLayout;
+@protocol TYCyclePagerTransformLayoutDelegate <NSObject>
+
+// initialize layout attributes
+- (void)pagerViewTransformLayout:(TYCyclePagerTransformLayout *)pagerViewTransformLayout initializeTransformAttributes:(UICollectionViewLayoutAttributes *)attributes;
+
+// apply layout attributes
+- (void)pagerViewTransformLayout:(TYCyclePagerTransformLayout *)pagerViewTransformLayout applyTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes;
+
+@end
+
+
+@interface TYCyclePagerViewLayout : NSObject
+
+@property (nonatomic, assign) CGSize itemSize;
+@property (nonatomic, assign) CGFloat itemSpacing;
+@property (nonatomic, assign) UIEdgeInsets sectionInset;
+
+@property (nonatomic, assign) TYCyclePagerTransformLayoutType layoutType;
+
+@property (nonatomic, assign) CGFloat minimumScale; // sacle default 0.8
+@property (nonatomic, assign) CGFloat minimumAlpha; // alpha default 1.0
+@property (nonatomic, assign) CGFloat maximumAngle; // angle is % default 0.2
+
+@property (nonatomic, assign) BOOL isInfiniteLoop;  // infinte scroll
+@property (nonatomic, assign) CGFloat rateOfChange; // scale and angle change rate
+@property (nonatomic, assign) BOOL adjustSpacingWhenScroling; 
+
+/**
+ pageView cell item vertical centering
+ */
+@property (nonatomic, assign) BOOL itemVerticalCenter;
+
+/**
+ first and last item horizontalc enter, when isInfiniteLoop is NO
+ */
+@property (nonatomic, assign) BOOL itemHorizontalCenter;
+
+// sectionInset
+@property (nonatomic, assign, readonly) UIEdgeInsets onlyOneSectionInset;
+@property (nonatomic, assign, readonly) UIEdgeInsets firstSectionInset;
+@property (nonatomic, assign, readonly) UIEdgeInsets lastSectionInset;
+@property (nonatomic, assign, readonly) UIEdgeInsets middleSectionInset;
+
+@end
+
+
+@interface TYCyclePagerTransformLayout : UICollectionViewFlowLayout
+
+@property (nonatomic, strong) TYCyclePagerViewLayout *layout;
+
+@property (nonatomic, weak, nullable) id<TYCyclePagerTransformLayoutDelegate> delegate;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 300 - 0
Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerTransformLayout.m

@@ -0,0 +1,300 @@
+//
+//  TYCyclePagerViewLayout.m
+//  TYCyclePagerViewDemo
+//
+//  Created by tany on 2017/6/19.
+//  Copyright © 2017年 tany. All rights reserved.
+//
+
+#import "TYCyclePagerTransformLayout.h"
+
+typedef NS_ENUM(NSUInteger, TYTransformLayoutItemDirection) {
+    TYTransformLayoutItemLeft,
+    TYTransformLayoutItemCenter,
+    TYTransformLayoutItemRight,
+};
+
+
+@interface TYCyclePagerTransformLayout () {
+    struct {
+        unsigned int applyTransformToAttributes   :1;
+        unsigned int initializeTransformAttributes   :1;
+    }_delegateFlags;
+}
+
+@property (nonatomic, assign) BOOL applyTransformToAttributesDelegate;
+
+@end
+
+
+@interface TYCyclePagerViewLayout ()
+
+@property (nonatomic, weak) UIView *pageView;
+
+@end
+
+
+@implementation TYCyclePagerTransformLayout
+
+- (instancetype)init {
+    if (self = [super init]) {
+        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    }
+    return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+    if (self = [super initWithCoder:aDecoder]) {
+        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    }
+    return self;
+}
+
+#pragma mark - getter setter
+
+- (void)setDelegate:(id<TYCyclePagerTransformLayoutDelegate>)delegate {
+    _delegate = delegate;
+    _delegateFlags.initializeTransformAttributes = [delegate respondsToSelector:@selector(pagerViewTransformLayout:initializeTransformAttributes:)];
+    _delegateFlags.applyTransformToAttributes = [delegate respondsToSelector:@selector(pagerViewTransformLayout:applyTransformToAttributes:)];
+}
+
+- (void)setLayout:(TYCyclePagerViewLayout *)layout {
+    _layout = layout;
+    _layout.pageView = self.collectionView;
+    self.itemSize = _layout.itemSize;
+    self.minimumInteritemSpacing = _layout.itemSpacing;
+    self.minimumLineSpacing = _layout.itemSpacing;
+}
+
+- (CGSize)itemSize {
+    if (!_layout) {
+        return [super itemSize];
+    }
+    return _layout.itemSize;
+}
+
+- (CGFloat)minimumLineSpacing {
+    if (!_layout) {
+        return [super minimumLineSpacing];
+    }
+    return _layout.itemSpacing;
+}
+
+- (CGFloat)minimumInteritemSpacing {
+    if (!_layout) {
+        return [super minimumInteritemSpacing];
+    }
+    return _layout.itemSpacing;
+}
+
+- (TYTransformLayoutItemDirection)directionWithCenterX:(CGFloat)centerX {
+    TYTransformLayoutItemDirection direction= TYTransformLayoutItemRight;
+    CGFloat contentCenterX = self.collectionView.contentOffset.x + CGRectGetWidth(self.collectionView.frame)/2;
+    if (ABS(centerX - contentCenterX) < 0.5) {
+        direction = TYTransformLayoutItemCenter;
+    }else if (centerX - contentCenterX < 0) {
+        direction = TYTransformLayoutItemLeft;
+    }
+    return direction;
+}
+
+#pragma mark - layout
+
+-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
+{
+    return _layout.layoutType == TYCyclePagerTransformLayoutNormal ? [super shouldInvalidateLayoutForBoundsChange:newBounds] : YES;
+}
+
+- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
+    if (_delegateFlags.applyTransformToAttributes || _layout.layoutType != TYCyclePagerTransformLayoutNormal) {
+        NSArray *attributesArray = [[NSArray alloc] initWithArray:[super layoutAttributesForElementsInRect:rect] copyItems:YES];
+        CGRect visibleRect = {self.collectionView.contentOffset,self.collectionView.bounds.size};
+        for (UICollectionViewLayoutAttributes *attributes in attributesArray) {
+            if (!CGRectIntersectsRect(visibleRect, attributes.frame)) {
+                continue;
+            }
+            if (_delegateFlags.applyTransformToAttributes) {
+                [_delegate pagerViewTransformLayout:self applyTransformToAttributes:attributes];
+            }else {
+                [self applyTransformToAttributes:attributes layoutType:_layout.layoutType];
+            }
+        }
+        return attributesArray;
+    }
+    return [super layoutAttributesForElementsInRect:rect];
+}
+
+- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
+    UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForItemAtIndexPath:indexPath];
+    if (_delegateFlags.initializeTransformAttributes) {
+        [_delegate pagerViewTransformLayout:self initializeTransformAttributes:attributes];
+    }else if(_layout.layoutType != TYCyclePagerTransformLayoutNormal){
+        [self initializeTransformAttributes:attributes layoutType:_layout.layoutType];
+    }
+    return attributes;
+}
+
+#pragma mark - transform
+
+- (void)initializeTransformAttributes:(UICollectionViewLayoutAttributes *)attributes layoutType:(TYCyclePagerTransformLayoutType)layoutType {
+    switch (layoutType) {
+        case TYCyclePagerTransformLayoutLinear:
+            [self applyLinearTransformToAttributes:attributes scale:_layout.minimumScale alpha:_layout.minimumAlpha];
+            break;
+        case TYCyclePagerTransformLayoutCoverflow:
+        {
+            [self applyCoverflowTransformToAttributes:attributes angle:_layout.maximumAngle alpha:_layout.minimumAlpha];
+            break;
+        }
+        default:
+            break;
+    }
+}
+
+- (void)applyTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes layoutType:(TYCyclePagerTransformLayoutType)layoutType {
+    switch (layoutType) {
+        case TYCyclePagerTransformLayoutLinear:
+            [self applyLinearTransformToAttributes:attributes];
+            break;
+        case TYCyclePagerTransformLayoutCoverflow:
+            [self applyCoverflowTransformToAttributes:attributes];
+            break;
+        default:
+            break;
+    }
+}
+
+#pragma mark - LinearTransform
+
+- (void)applyLinearTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes {
+    CGFloat collectionViewWidth = self.collectionView.frame.size.width;
+    if (collectionViewWidth <= 0) {
+        return;
+    }
+    CGFloat centetX = self.collectionView.contentOffset.x + collectionViewWidth/2;
+    CGFloat delta = ABS(attributes.center.x - centetX);
+    CGFloat scale = MAX(1 - delta/collectionViewWidth*_layout.rateOfChange, _layout.minimumScale);
+    CGFloat alpha = MAX(1 - delta/collectionViewWidth, _layout.minimumAlpha);
+    [self applyLinearTransformToAttributes:attributes scale:scale alpha:alpha];
+}
+
+- (void)applyLinearTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes scale:(CGFloat)scale alpha:(CGFloat)alpha {
+    CGAffineTransform transform = CGAffineTransformMakeScale(scale, scale);
+    if (_layout.adjustSpacingWhenScroling) {
+        TYTransformLayoutItemDirection direction = [self directionWithCenterX:attributes.center.x];
+        CGFloat translate = 0;
+        switch (direction) {
+            case TYTransformLayoutItemLeft:
+                translate = 1.15 * attributes.size.width*(1-scale)/2;
+                break;
+            case TYTransformLayoutItemRight:
+                translate = -1.15 * attributes.size.width*(1-scale)/2;
+                break;
+            default:
+                // center
+                scale = 1.0;
+                alpha = 1.0;
+                break;
+        }
+        transform = CGAffineTransformTranslate(transform,translate, 0);
+    }
+    attributes.transform = transform;
+    attributes.alpha = alpha;
+}
+
+#pragma mark - CoverflowTransform
+
+- (void)applyCoverflowTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes{
+    CGFloat collectionViewWidth = self.collectionView.frame.size.width;
+    if (collectionViewWidth <= 0) {
+        return;
+    }
+    CGFloat centetX = self.collectionView.contentOffset.x + collectionViewWidth/2;
+    CGFloat delta = ABS(attributes.center.x - centetX);
+    CGFloat angle = MIN(delta/collectionViewWidth*(1-_layout.rateOfChange), _layout.maximumAngle);
+    CGFloat alpha = MAX(1 - delta/collectionViewWidth, _layout.minimumAlpha);
+    [self applyCoverflowTransformToAttributes:attributes angle:angle alpha:alpha];
+}
+
+- (void)applyCoverflowTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes angle:(CGFloat)angle alpha:(CGFloat)alpha {
+    TYTransformLayoutItemDirection direction = [self directionWithCenterX:attributes.center.x];
+    CATransform3D transform3D = CATransform3DIdentity;
+    transform3D.m34 = -0.002;
+    CGFloat translate = 0;
+    switch (direction) {
+        case TYTransformLayoutItemLeft:
+            translate = (1-cos(angle*1.2*M_PI))*attributes.size.width;
+            break;
+        case TYTransformLayoutItemRight:
+            translate = -(1-cos(angle*1.2*M_PI))*attributes.size.width;
+            angle = -angle;
+            break;
+        default:
+            // center
+            angle = 0;
+            alpha = 1;
+            break;
+    }
+
+    transform3D = CATransform3DRotate(transform3D, M_PI*angle, 0, 1, 0);
+    if (_layout.adjustSpacingWhenScroling) {
+        transform3D = CATransform3DTranslate(transform3D, translate, 0, 0);
+    }
+    attributes.transform3D = transform3D;
+    attributes.alpha = alpha;
+
+}
+@end
+
+
+@implementation TYCyclePagerViewLayout
+
+- (instancetype)init {
+    if (self = [super init]) {
+        _itemVerticalCenter = YES;
+        _minimumScale = 0.8;
+        _minimumAlpha = 1.0;
+        _maximumAngle = 0.2;
+        _rateOfChange = 0.4;
+        _adjustSpacingWhenScroling = YES;
+    }
+    return self;
+}
+
+#pragma mark - getter
+
+- (UIEdgeInsets)onlyOneSectionInset {
+    CGFloat leftSpace = _pageView && !_isInfiniteLoop && _itemHorizontalCenter ? (CGRectGetWidth(_pageView.frame) - _itemSize.width)/2 : _sectionInset.left;
+    CGFloat rightSpace = _pageView && !_isInfiniteLoop && _itemHorizontalCenter ? (CGRectGetWidth(_pageView.frame) - _itemSize.width)/2 : _sectionInset.right;
+    if (_itemVerticalCenter) {
+        CGFloat verticalSpace = (CGRectGetHeight(_pageView.frame) - _itemSize.height)/2;
+        return UIEdgeInsetsMake(verticalSpace, leftSpace, verticalSpace, rightSpace);
+    }
+    return UIEdgeInsetsMake(_sectionInset.top, leftSpace, _sectionInset.bottom, rightSpace);
+}
+
+- (UIEdgeInsets)firstSectionInset {
+    if (_itemVerticalCenter) {
+        CGFloat verticalSpace = (CGRectGetHeight(_pageView.frame) - _itemSize.height)/2;
+        return UIEdgeInsetsMake(verticalSpace, _sectionInset.left, verticalSpace, _itemSpacing);
+    }
+    return UIEdgeInsetsMake(_sectionInset.top, _sectionInset.left, _sectionInset.bottom, _itemSpacing);
+}
+
+- (UIEdgeInsets)lastSectionInset {
+    if (_itemVerticalCenter) {
+        CGFloat verticalSpace = (CGRectGetHeight(_pageView.frame) - _itemSize.height)/2;
+        return UIEdgeInsetsMake(verticalSpace, 0, verticalSpace, _sectionInset.right);
+    }
+    return UIEdgeInsetsMake(_sectionInset.top, 0, _sectionInset.bottom, _sectionInset.right);
+}
+
+- (UIEdgeInsets)middleSectionInset {
+    if (_itemVerticalCenter) {
+        CGFloat verticalSpace = (CGRectGetHeight(_pageView.frame) - _itemSize.height)/2;
+        return UIEdgeInsetsMake(verticalSpace, 0, verticalSpace, _itemSpacing);
+    }
+    return _sectionInset;
+}
+
+@end

+ 180 - 0
Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.h

@@ -0,0 +1,180 @@
+//
+//  TYCyclePagerView.h
+//  TYCyclePagerViewDemo
+//
+//  Created by tany on 2017/6/14.
+//  Copyright © 2017年 tany. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "TYCyclePagerTransformLayout.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef struct {
+    NSInteger index;
+    NSInteger section;
+}TYIndexSection;
+
+// pagerView scrolling direction
+typedef NS_ENUM(NSUInteger, TYPagerScrollDirection) {
+    TYPagerScrollDirectionLeft,
+    TYPagerScrollDirectionRight,
+};
+
+@class TYCyclePagerView;
+@protocol TYCyclePagerViewDataSource <NSObject>
+
+- (NSInteger)numberOfItemsInPagerView:(TYCyclePagerView *)pageView;
+
+- (__kindof UICollectionViewCell *)pagerView:(TYCyclePagerView *)pagerView cellForItemAtIndex:(NSInteger)index;
+
+/**
+ return pagerView layout,and cache layout
+ */
+- (TYCyclePagerViewLayout *)layoutForPagerView:(TYCyclePagerView *)pageView;
+
+@end
+
+@protocol TYCyclePagerViewDelegate <NSObject>
+
+@optional
+
+/**
+ pagerView did scroll to new index page
+ */
+- (void)pagerView:(TYCyclePagerView *)pageView didScrollFromIndex:(NSInteger)fromIndex toIndex:(NSInteger)toIndex;
+
+/**
+ pagerView did selected item cell
+ */
+- (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndex:(NSInteger)index;
+- (void)pagerView:(TYCyclePagerView *)pageView didSelectedItemCell:(__kindof UICollectionViewCell *)cell atIndexSection:(TYIndexSection)indexSection;
+
+// custom layout
+- (void)pagerView:(TYCyclePagerView *)pageView initializeTransformAttributes:(UICollectionViewLayoutAttributes *)attributes;
+
+- (void)pagerView:(TYCyclePagerView *)pageView applyTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes;
+
+
+// scrollViewDelegate
+
+- (void)pagerViewDidScroll:(TYCyclePagerView *)pageView;
+
+- (void)pagerViewWillBeginDragging:(TYCyclePagerView *)pageView;
+
+- (void)pagerViewDidEndDragging:(TYCyclePagerView *)pageView willDecelerate:(BOOL)decelerate;
+
+- (void)pagerViewWillBeginDecelerating:(TYCyclePagerView *)pageView;
+
+- (void)pagerViewDidEndDecelerating:(TYCyclePagerView *)pageView;
+
+- (void)pagerViewWillBeginScrollingAnimation:(TYCyclePagerView *)pageView;
+
+- (void)pagerViewDidEndScrollingAnimation:(TYCyclePagerView *)pageView;
+
+@end
+
+
+@interface TYCyclePagerView : UIView
+
+// will be automatically resized to track the size of the pagerView
+@property (nonatomic, strong, nullable) UIView *backgroundView; 
+
+@property (nonatomic, weak, nullable) id<TYCyclePagerViewDataSource> dataSource;
+@property (nonatomic, weak, nullable) id<TYCyclePagerViewDelegate> delegate;
+
+// pager view, don't set dataSource and delegate
+@property (nonatomic, weak, readonly) UICollectionView *collectionView;
+// pager view layout
+@property (nonatomic, strong, readonly) TYCyclePagerViewLayout *layout;
+
+/**
+ is infinite cycle pageview
+ */
+@property (nonatomic, assign) BOOL isInfiniteLoop;
+
+/**
+ pagerView automatic scroll time interval, default 0,disable automatic
+ */
+@property (nonatomic, assign) CGFloat autoScrollInterval;
+
+@property (nonatomic, assign) BOOL reloadDataNeedResetIndex;
+
+/**
+ current page index
+ */
+@property (nonatomic, assign, readonly) NSInteger curIndex;
+@property (nonatomic, assign, readonly) TYIndexSection indexSection;
+
+// scrollView property
+@property (nonatomic, assign, readonly) CGPoint contentOffset;
+@property (nonatomic, assign, readonly) BOOL tracking;
+@property (nonatomic, assign, readonly) BOOL dragging;
+@property (nonatomic, assign, readonly) BOOL decelerating;
+
+
+/**
+ reload data, !!important!!: will clear layout and call delegate layoutForPagerView
+ */
+- (void)reloadData;
+
+/**
+ update data is reload data, but not clear layuot
+ */
+- (void)updateData;
+
+/**
+ if you only want update layout
+ */
+- (void)setNeedUpdateLayout;
+
+/**
+ will set layout nil and call delegate->layoutForPagerView
+ */
+- (void)setNeedClearLayout;
+
+/**
+ current index cell in pagerView
+ */
+- (__kindof UICollectionViewCell * _Nullable)curIndexCell;
+
+/**
+ visible cells in pageView
+ */
+- (NSArray<__kindof UICollectionViewCell *> *_Nullable)visibleCells;
+
+
+/**
+ visible pageView indexs, maybe repeat index
+ */
+- (NSArray *)visibleIndexs;
+
+/**
+ scroll to item at index
+ */
+- (void)scrollToItemAtIndex:(NSInteger)index animate:(BOOL)animate;
+- (void)scrollToItemAtIndexSection:(TYIndexSection)indexSection animate:(BOOL)animate;
+/**
+ scroll to next or pre item
+ */
+- (void)scrollToNearlyIndexAtDirection:(TYPagerScrollDirection)direction animate:(BOOL)animate;
+
+/**
+ register pager view cell with class
+ */
+- (void)registerClass:(Class)Class forCellWithReuseIdentifier:(NSString *)identifier;
+
+/**
+ register pager view cell with nib
+ */
+- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier;
+
+/**
+ dequeue reusable cell for pagerView
+ */
+- (__kindof UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndex:(NSInteger)index;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 607 - 0
Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYCyclePagerView.m

@@ -0,0 +1,607 @@
+//
+//  TYCyclePagerView.m
+//  TYCyclePagerViewDemo
+//
+//  Created by tany on 2017/6/14.
+//  Copyright © 2017年 tany. All rights reserved.
+//
+
+#import "TYCyclePagerView.h"
+
+NS_INLINE BOOL TYEqualIndexSection(TYIndexSection indexSection1,TYIndexSection indexSection2) {
+    return indexSection1.index == indexSection2.index && indexSection1.section == indexSection2.section;
+}
+
+NS_INLINE TYIndexSection TYMakeIndexSection(NSInteger index, NSInteger section) {
+    TYIndexSection indexSection;
+    indexSection.index = index;
+    indexSection.section = section;
+    return indexSection;
+}
+
+@interface TYCyclePagerView () <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, TYCyclePagerTransformLayoutDelegate> {
+    struct {
+        unsigned int pagerViewDidScroll   :1;
+        unsigned int didScrollFromIndexToNewIndex   :1;
+        unsigned int initializeTransformAttributes   :1;
+        unsigned int applyTransformToAttributes   :1;
+    }_delegateFlags;
+    struct {
+        unsigned int cellForItemAtIndex   :1;
+        unsigned int layoutForPagerView   :1;
+    }_dataSourceFlags;
+}
+
+// UI
+@property (nonatomic, weak) UICollectionView *collectionView;
+@property (nonatomic, strong) TYCyclePagerViewLayout *layout;
+@property (nonatomic, strong) NSTimer *timer;
+
+// Data
+@property (nonatomic, assign) NSInteger numberOfItems;
+
+@property (nonatomic, assign) NSInteger dequeueSection;
+@property (nonatomic, assign) TYIndexSection beginDragIndexSection;
+@property (nonatomic, assign) NSInteger firstScrollIndex;
+
+@property (nonatomic, assign) BOOL needClearLayout;
+@property (nonatomic, assign) BOOL didReloadData;
+@property (nonatomic, assign) BOOL didLayout;
+@property (nonatomic, assign) BOOL needResetIndex;
+
+@end
+
+#define kPagerViewMaxSectionCount 200
+#define kPagerViewMinSectionCount 18
+
+@implementation TYCyclePagerView
+
+#pragma mark - life Cycle
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self configureProperty];
+        
+        [self addCollectionView];
+    }
+    return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+    if (self = [super initWithCoder:aDecoder]) {
+        [self configureProperty];
+        
+        [self addCollectionView];
+    }
+    return self;
+}
+
+- (void)configureProperty {
+    _needResetIndex = NO;
+    _didReloadData = NO;
+    _didLayout = NO;
+    _autoScrollInterval = 0;
+    _isInfiniteLoop = YES;
+    _beginDragIndexSection.index = 0;
+    _beginDragIndexSection.section = 0;
+    _indexSection.index = -1;
+    _indexSection.section = -1;
+    _firstScrollIndex = -1;
+}
+
+- (void)addCollectionView {
+    TYCyclePagerTransformLayout *layout = [[TYCyclePagerTransformLayout alloc]init];
+    UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];
+    layout.delegate = _delegateFlags.applyTransformToAttributes ? self : nil;;
+    collectionView.backgroundColor = [UIColor clearColor];
+    collectionView.dataSource = self;
+    collectionView.delegate = self;
+    collectionView.pagingEnabled = NO;
+    collectionView.decelerationRate = 1-0.0076;
+    if ([collectionView respondsToSelector:@selector(setPrefetchingEnabled:)]) {
+        collectionView.prefetchingEnabled = NO;
+    }
+    collectionView.showsHorizontalScrollIndicator = NO;
+    collectionView.showsVerticalScrollIndicator = NO;
+    [self addSubview:collectionView];
+    _collectionView = collectionView;
+}
+
+- (void)willMoveToSuperview:(UIView *)newSuperview {
+    if (!newSuperview) {
+        [self removeTimer];
+    }else {
+        [self removeTimer];
+        if (_autoScrollInterval > 0) {
+            [self addTimer];
+        }
+    }
+}
+
+
+#pragma mark - timer
+
+- (void)addTimer {
+    if (_timer || _autoScrollInterval <= 0) {
+        return;
+    }
+    _timer = [NSTimer timerWithTimeInterval:_autoScrollInterval target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
+    [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];
+}
+
+- (void)removeTimer {
+    if (!_timer) {
+        return;
+    }
+    [_timer invalidate];
+    _timer = nil;
+}
+
+- (void)timerFired:(NSTimer *)timer {
+    if (!self.superview || !self.window || _numberOfItems == 0 || self.tracking) {
+        return;
+    }
+    
+    [self scrollToNearlyIndexAtDirection:TYPagerScrollDirectionRight animate:YES];
+}
+
+#pragma mark - getter
+
+- (TYCyclePagerViewLayout *)layout {
+    if (!_layout) {
+        if (_dataSourceFlags.layoutForPagerView) {
+            _layout = [_dataSource layoutForPagerView:self];
+            _layout.isInfiniteLoop = _isInfiniteLoop;
+        }
+        if (_layout.itemSize.width <= 0 || _layout.itemSize.height <= 0) {
+            _layout = nil;
+        }
+    }
+    return _layout;
+}
+
+- (NSInteger)curIndex {
+    return _indexSection.index;
+}
+
+- (CGPoint)contentOffset {
+    return _collectionView.contentOffset;
+}
+
+- (BOOL)tracking {
+    return _collectionView.tracking;
+}
+
+- (BOOL)dragging {
+    return _collectionView.dragging;
+}
+
+- (BOOL)decelerating {
+    return _collectionView.decelerating;
+}
+
+- (UIView *)backgroundView {
+    return _collectionView.backgroundView;
+}
+
+- (__kindof UICollectionViewCell *)curIndexCell {
+    return [_collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:_indexSection.index inSection:_indexSection.section]];
+}
+
+- (NSArray<__kindof UICollectionViewCell *> *)visibleCells {
+    return _collectionView.visibleCells;
+}
+
+- (NSArray *)visibleIndexs {
+    NSMutableArray *indexs = [NSMutableArray array];
+    for (NSIndexPath *indexPath in _collectionView.indexPathsForVisibleItems) {
+        [indexs addObject:@(indexPath.item)];
+    }
+    return [indexs copy];
+}
+
+#pragma mark - setter
+
+- (void)setBackgroundView:(UIView *)backgroundView {
+    [_collectionView setBackgroundView:backgroundView];
+}
+
+- (void)setAutoScrollInterval:(CGFloat)autoScrollInterval {
+    _autoScrollInterval = autoScrollInterval;
+    [self removeTimer];
+    if (autoScrollInterval > 0 && self.superview) {
+        [self addTimer];
+    }
+}
+
+- (void)setDelegate:(id<TYCyclePagerViewDelegate>)delegate {
+    _delegate = delegate;
+    _delegateFlags.pagerViewDidScroll = [delegate respondsToSelector:@selector(pagerViewDidScroll:)];
+    _delegateFlags.didScrollFromIndexToNewIndex = [delegate respondsToSelector:@selector(pagerView:didScrollFromIndex:toIndex:)];
+    _delegateFlags.initializeTransformAttributes = [delegate respondsToSelector:@selector(pagerView:initializeTransformAttributes:)];
+    _delegateFlags.applyTransformToAttributes = [delegate respondsToSelector:@selector(pagerView:applyTransformToAttributes:)];
+    if (self.collectionView && self.collectionView.collectionViewLayout) {
+        ((TYCyclePagerTransformLayout *)self.collectionView.collectionViewLayout).delegate = _delegateFlags.applyTransformToAttributes ? self : nil;
+    }
+}
+
+- (void)setDataSource:(id<TYCyclePagerViewDataSource>)dataSource {
+    _dataSource = dataSource;
+    _dataSourceFlags.cellForItemAtIndex = [dataSource respondsToSelector:@selector(pagerView:cellForItemAtIndex:)];
+    _dataSourceFlags.layoutForPagerView = [dataSource respondsToSelector:@selector(layoutForPagerView:)];
+}
+
+#pragma mark - public
+
+- (void)reloadData {
+    _didReloadData = YES;
+    _needResetIndex = YES;
+    [self setNeedClearLayout];
+    [self clearLayout];
+    [self updateData];
+}
+
+// not clear layout
+- (void)updateData {
+    [self updateLayout];
+    _numberOfItems = [_dataSource numberOfItemsInPagerView:self];
+    [_collectionView reloadData];
+    if (!_didLayout && !CGRectIsEmpty(self.collectionView.frame) && _indexSection.index < 0) {
+        _didLayout = YES;
+    }
+    BOOL needResetIndex = _needResetIndex && _reloadDataNeedResetIndex;
+    _needResetIndex = NO;
+    if (needResetIndex) {
+        [self removeTimer];
+    }
+    [self resetPagerViewAtIndex:(_indexSection.index < 0 && !CGRectIsEmpty(self.collectionView.frame)) || needResetIndex ? 0 :_indexSection.index];
+    if (needResetIndex) {
+        [self addTimer];
+    }
+}
+
+- (void)scrollToNearlyIndexAtDirection:(TYPagerScrollDirection)direction animate:(BOOL)animate {
+    TYIndexSection indexSection = [self nearlyIndexPathAtDirection:direction];
+    [self scrollToItemAtIndexSection:indexSection animate:animate];
+}
+
+- (void)scrollToItemAtIndex:(NSInteger)index animate:(BOOL)animate {
+    if (!_didLayout && _didReloadData) {
+        _firstScrollIndex = index;
+    }else {
+        _firstScrollIndex = -1;
+    }
+    if (!_isInfiniteLoop) {
+        [self scrollToItemAtIndexSection:TYMakeIndexSection(index, 0) animate:animate];
+        return;
+    }
+
+    [self scrollToItemAtIndexSection:TYMakeIndexSection(index, index >= self.curIndex ? _indexSection.section : _indexSection.section+1) animate:animate];
+}
+
+- (void)scrollToItemAtIndexSection:(TYIndexSection)indexSection animate:(BOOL)animate {
+    if (_numberOfItems <= 0 || ![self isValidIndexSection:indexSection]) {
+        //NSLog(@"scrollToItemAtIndex: item indexSection is invalid!");
+        return;
+    }
+    
+    if (animate && [_delegate respondsToSelector:@selector(pagerViewWillBeginScrollingAnimation:)]) {
+        [_delegate pagerViewWillBeginScrollingAnimation:self];
+    }
+    CGFloat offset = [self caculateOffsetXAtIndexSection:indexSection];
+    [_collectionView setContentOffset:CGPointMake(offset, _collectionView.contentOffset.y) animated:animate];
+}
+
+- (void)registerClass:(Class)Class forCellWithReuseIdentifier:(NSString *)identifier {
+    [_collectionView registerClass:Class forCellWithReuseIdentifier:identifier];
+}
+
+- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier {
+    [_collectionView registerNib:nib forCellWithReuseIdentifier:identifier];
+}
+
+- (__kindof UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndex:(NSInteger)index {
+    UICollectionViewCell *cell = [_collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:[NSIndexPath indexPathForItem:index inSection:_dequeueSection]];
+    return cell;
+}
+
+#pragma mark - configure layout
+
+- (void)updateLayout {
+    if (!self.layout) {
+        return;
+    }
+    self.layout.isInfiniteLoop = _isInfiniteLoop;
+    ((TYCyclePagerTransformLayout *)_collectionView.collectionViewLayout).layout = self.layout;
+}
+
+- (void)clearLayout {
+    if (_needClearLayout) {
+        _layout = nil;
+        _needClearLayout = NO;
+    }
+}
+
+- (void)setNeedClearLayout {
+    _needClearLayout = YES;
+}
+
+- (void)setNeedUpdateLayout {
+    if (!self.layout) {
+        return;
+    }
+    [self clearLayout];
+    [self updateLayout];
+    [_collectionView.collectionViewLayout invalidateLayout];
+    [self resetPagerViewAtIndex:_indexSection.index < 0 ? 0 :_indexSection.index];
+}
+
+#pragma mark - pager index
+
+- (BOOL)isValidIndexSection:(TYIndexSection)indexSection {
+    return indexSection.index >= 0 && indexSection.index < _numberOfItems && indexSection.section >= 0 && indexSection.section < kPagerViewMaxSectionCount;
+}
+
+- (TYIndexSection)nearlyIndexPathAtDirection:(TYPagerScrollDirection)direction{
+    return [self nearlyIndexPathForIndexSection:_indexSection direction:direction];
+}
+
+- (TYIndexSection)nearlyIndexPathForIndexSection:(TYIndexSection)indexSection direction:(TYPagerScrollDirection)direction {
+    if (indexSection.index < 0 || indexSection.index >= _numberOfItems) {
+        return indexSection;
+    }
+    
+    if (!_isInfiniteLoop) {
+        if (direction == TYPagerScrollDirectionRight && indexSection.index == _numberOfItems - 1) {
+            return _autoScrollInterval > 0 ? TYMakeIndexSection(0, 0) : indexSection;
+        } else if (direction == TYPagerScrollDirectionRight) {
+            return TYMakeIndexSection(indexSection.index+1, 0);
+        }
+        
+        if (indexSection.index == 0) {
+            return _autoScrollInterval > 0 ? TYMakeIndexSection(_numberOfItems - 1, 0) : indexSection;
+        }
+        return TYMakeIndexSection(indexSection.index-1, 0);
+    }
+    
+    if (direction == TYPagerScrollDirectionRight) {
+        if (indexSection.index < _numberOfItems-1) {
+            return TYMakeIndexSection(indexSection.index+1, indexSection.section);
+        }
+        if (indexSection.section >= kPagerViewMaxSectionCount-1) {
+            return TYMakeIndexSection(indexSection.index, kPagerViewMaxSectionCount-1);
+        }
+        return TYMakeIndexSection(0, indexSection.section+1);
+    }
+    
+    if (indexSection.index > 0) {
+        return TYMakeIndexSection(indexSection.index-1, indexSection.section);
+    }
+    if (indexSection.section <= 0) {
+        return TYMakeIndexSection(indexSection.index, 0);
+    }
+    return TYMakeIndexSection(_numberOfItems-1, indexSection.section-1);
+}
+
+- (TYIndexSection)caculateIndexSectionWithOffsetX:(CGFloat)offsetX {
+    if (_numberOfItems <= 0) {
+        return TYMakeIndexSection(0, 0);
+    }
+     UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)_collectionView.collectionViewLayout;
+    CGFloat leftEdge = _isInfiniteLoop ? _layout.sectionInset.left : _layout.onlyOneSectionInset.left;
+    CGFloat width = CGRectGetWidth(_collectionView.frame);
+    CGFloat middleOffset = offsetX + width/2;
+    CGFloat itemWidth = layout.itemSize.width + layout.minimumInteritemSpacing;
+    NSInteger curIndex = 0;
+    NSInteger curSection = 0;
+    if (middleOffset - leftEdge >= 0) {
+        NSInteger itemIndex = (middleOffset - leftEdge+layout.minimumInteritemSpacing/2)/itemWidth;
+        if (itemIndex < 0) {
+            itemIndex = 0;
+        }else if (itemIndex >= _numberOfItems*kPagerViewMaxSectionCount) {
+            itemIndex = _numberOfItems*kPagerViewMaxSectionCount-1;
+        }
+        curIndex = itemIndex%_numberOfItems;
+        curSection = itemIndex/_numberOfItems;
+    }
+    return TYMakeIndexSection(curIndex, curSection);
+}
+
+- (CGFloat)caculateOffsetXAtIndexSection:(TYIndexSection)indexSection{
+    if (_numberOfItems == 0) {
+        return 0;
+    }
+    UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)_collectionView.collectionViewLayout;
+    UIEdgeInsets edge = _isInfiniteLoop ? _layout.sectionInset : _layout.onlyOneSectionInset;
+    CGFloat leftEdge = edge.left;
+    CGFloat rightEdge = edge.right;
+    CGFloat width = CGRectGetWidth(_collectionView.frame);
+    CGFloat itemWidth = layout.itemSize.width + layout.minimumInteritemSpacing;
+    CGFloat offsetX = 0;
+    if (!_isInfiniteLoop && !_layout.itemHorizontalCenter && indexSection.index == _numberOfItems - 1) {
+        offsetX = leftEdge + itemWidth*(indexSection.index + indexSection.section*_numberOfItems) - (width - itemWidth) -  layout.minimumInteritemSpacing + rightEdge;
+    }else {
+        offsetX = leftEdge + itemWidth*(indexSection.index + indexSection.section*_numberOfItems) - layout.minimumInteritemSpacing/2 - (width - itemWidth)/2;
+    }
+    return MAX(offsetX, 0);
+}
+
+- (void)resetPagerViewAtIndex:(NSInteger)index {
+    if (_didLayout && _firstScrollIndex >= 0) {
+        index = _firstScrollIndex;
+        _firstScrollIndex = -1;
+    }
+    if (index < 0) {
+        return;
+    }
+    if (index >= _numberOfItems) {
+        index = 0;
+    }
+    [self scrollToItemAtIndexSection:TYMakeIndexSection(index, _isInfiniteLoop ? kPagerViewMaxSectionCount/3 : 0) animate:NO];
+    if (!_isInfiniteLoop && _indexSection.index < 0) {
+        [self scrollViewDidScroll:_collectionView];
+    }
+}
+
+- (void)recyclePagerViewIfNeed {
+    if (!_isInfiniteLoop) {
+        return;
+    }
+    if (_indexSection.section > kPagerViewMaxSectionCount - kPagerViewMinSectionCount || _indexSection.section < kPagerViewMinSectionCount) {
+        [self resetPagerViewAtIndex:_indexSection.index];
+    }
+}
+
+#pragma mark - UICollectionViewDataSource
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return _isInfiniteLoop ? kPagerViewMaxSectionCount : 1;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    _numberOfItems = [_dataSource numberOfItemsInPagerView:self];
+    return _numberOfItems;
+}
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    _dequeueSection = indexPath.section;
+    if (_dataSourceFlags.cellForItemAtIndex) {
+       return [_dataSource pagerView:self cellForItemAtIndex:indexPath.row];
+    }
+    NSAssert(NO, @"pagerView cellForItemAtIndex: is nil!");
+    return nil;
+}
+
+#pragma mark - UICollectionViewDelegateFlowLayout
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
+    if (!_isInfiniteLoop) {
+        return _layout.onlyOneSectionInset;
+    }
+    if (section == 0 ) {
+        return _layout.firstSectionInset;
+    }else if (section == kPagerViewMaxSectionCount -1) {
+        return _layout.lastSectionInset;
+    }
+    return _layout.middleSectionInset;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
+    if ([_delegate respondsToSelector:@selector(pagerView:didSelectedItemCell:atIndex:)]) {
+        [_delegate pagerView:self didSelectedItemCell:cell atIndex:indexPath.item];
+    }
+    if ([_delegate respondsToSelector:@selector(pagerView:didSelectedItemCell:atIndexSection:)]) {
+        [_delegate pagerView:self didSelectedItemCell:cell atIndexSection:TYMakeIndexSection(indexPath.item, indexPath.section)];
+    }
+}
+
+#pragma mark - UIScrollViewDelegate
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (!_didLayout) {
+        return;
+    }
+    TYIndexSection newIndexSection =  [self caculateIndexSectionWithOffsetX:scrollView.contentOffset.x];
+    if (_numberOfItems <= 0 || ![self isValidIndexSection:newIndexSection]) {
+        NSLog(@"inVlaidIndexSection:(%ld,%ld)!",(long)newIndexSection.index,(long)newIndexSection.section);
+        return;
+    }
+    TYIndexSection indexSection = _indexSection;
+    _indexSection = newIndexSection;
+    
+    if (_delegateFlags.pagerViewDidScroll) {
+        [_delegate pagerViewDidScroll:self];
+    }
+    
+    if (_delegateFlags.didScrollFromIndexToNewIndex && !TYEqualIndexSection(_indexSection, indexSection)) {
+        //NSLog(@"curIndex %ld",(long)_indexSection.index);
+        [_delegate pagerView:self didScrollFromIndex:MAX(indexSection.index, 0) toIndex:_indexSection.index];
+    }
+}
+
+- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
+    if (_autoScrollInterval > 0) {
+        [self removeTimer];
+    }
+    _beginDragIndexSection = [self caculateIndexSectionWithOffsetX:scrollView.contentOffset.x];
+    if ([_delegate respondsToSelector:@selector(pagerViewWillBeginDragging:)]) {
+        [_delegate pagerViewWillBeginDragging:self];
+    }
+}
+
+- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
+    if (fabs(velocity.x) < 0.35 || !TYEqualIndexSection(_beginDragIndexSection, _indexSection)) {
+        targetContentOffset->x = [self caculateOffsetXAtIndexSection:_indexSection];
+        return;
+    }
+    TYPagerScrollDirection direction = TYPagerScrollDirectionRight;
+    if ((scrollView.contentOffset.x < 0 && targetContentOffset->x <= 0) || (targetContentOffset->x < scrollView.contentOffset.x && scrollView.contentOffset.x < scrollView.contentSize.width - scrollView.frame.size.width)) {
+        direction = TYPagerScrollDirectionLeft;
+    }
+    TYIndexSection indexSection = [self nearlyIndexPathForIndexSection:_indexSection direction:direction];
+    targetContentOffset->x = [self caculateOffsetXAtIndexSection:indexSection];
+}
+
+- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
+    if (_autoScrollInterval > 0) {
+        [self addTimer];
+    }
+    if ([_delegate respondsToSelector:@selector(pagerViewDidEndDragging:willDecelerate:)]) {
+        [_delegate pagerViewDidEndDragging:self willDecelerate:decelerate];
+    }
+}
+
+- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
+    if ([_delegate respondsToSelector:@selector(pagerViewWillBeginDecelerating:)]) {
+        [_delegate pagerViewWillBeginDecelerating:self];
+    }
+}
+
+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
+    [self recyclePagerViewIfNeed];
+    if ([_delegate respondsToSelector:@selector(pagerViewDidEndDecelerating:)]) {
+        [_delegate pagerViewDidEndDecelerating:self];
+    }
+}
+
+- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
+    [self recyclePagerViewIfNeed];
+    if ([_delegate respondsToSelector:@selector(pagerViewDidEndScrollingAnimation:)]) {
+        [_delegate pagerViewDidEndScrollingAnimation:self];
+    }
+}
+
+#pragma mark - TYCyclePagerTransformLayoutDelegate
+
+- (void)pagerViewTransformLayout:(TYCyclePagerTransformLayout *)pagerViewTransformLayout initializeTransformAttributes:(UICollectionViewLayoutAttributes *)attributes {
+    if (_delegateFlags.initializeTransformAttributes) {
+        [_delegate pagerView:self initializeTransformAttributes:attributes];
+    }
+}
+
+- (void)pagerViewTransformLayout:(TYCyclePagerTransformLayout *)pagerViewTransformLayout applyTransformToAttributes:(UICollectionViewLayoutAttributes *)attributes {
+    if (_delegateFlags.applyTransformToAttributes) {
+        [_delegate pagerView:self applyTransformToAttributes:attributes];
+    }
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    BOOL needUpdateLayout = !CGRectEqualToRect(_collectionView.frame, self.bounds);
+    _collectionView.frame = self.bounds;
+    if ((_indexSection.section < 0 || needUpdateLayout) && (_numberOfItems > 0 || _didReloadData)) {
+        _didLayout = YES;
+        [self setNeedUpdateLayout];
+    }
+}
+
+- (void)dealloc {
+    ((TYCyclePagerTransformLayout *)_collectionView.collectionViewLayout).delegate = nil;
+    _collectionView.delegate = nil;
+    _collectionView.dataSource = nil;
+}
+
+@end
+
+

+ 47 - 0
Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.h

@@ -0,0 +1,47 @@
+//
+//  TYPageControl.h
+//  TYCyclePagerViewDemo
+//
+//  Created by tany on 2017/6/20.
+//  Copyright © 2017年 tany. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TYPageControl : UIControl
+
+@property (nonatomic, assign) NSInteger numberOfPages;          // default is 0
+@property (nonatomic, assign) NSInteger currentPage;            // default is 0. value pinned to 0..numberOfPages-1
+
+@property (nonatomic, assign) BOOL hidesForSinglePage;          // hide the the indicator if there is only one page. default is NO
+
+@property (nonatomic, assign) CGFloat pageIndicatorSpaing;
+@property (nonatomic, assign) UIEdgeInsets contentInset; // center will ignore this
+@property (nonatomic, assign ,readonly) CGSize contentSize; // real content size
+
+// override super 
+//@property (nonatomic, assign) UIControlContentVerticalAlignment contentVerticalAlignment;     // how to position content vertically inside control. default is center
+//@property (nonatomic, assign) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center
+
+// indicatorTint color
+@property (nullable, nonatomic,strong) UIColor *pageIndicatorTintColor;
+@property (nullable, nonatomic,strong) UIColor *currentPageIndicatorTintColor;
+
+// indicator image
+@property (nullable, nonatomic,strong) UIImage *pageIndicatorImage;
+@property (nullable, nonatomic,strong) UIImage *currentPageIndicatorImage;
+
+@property (nonatomic, assign) UIViewContentMode indicatorImageContentMode; // default is UIViewContentModeCenter
+
+@property (nonatomic, assign) CGSize pageIndicatorSize; // indicator size
+@property (nonatomic, assign) CGSize currentPageIndicatorSize; // default pageIndicatorSize
+
+@property (nonatomic, assign) CGFloat animateDuring; // default 0.3
+
+- (void)setCurrentPage:(NSInteger)currentPage animate:(BOOL)animate;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 285 - 0
Koala/Pods/TYCyclePagerView/TYCyclePagerViewDemo/TYCyclePagerView/TYPageControl.m

@@ -0,0 +1,285 @@
+//
+//  TYPageControl.m
+//  TYCyclePagerViewDemo
+//
+//  Created by tany on 2017/6/20.
+//  Copyright © 2017年 tany. All rights reserved.
+//
+
+#import "TYPageControl.h"
+
+@interface TYPageControl ()
+// UI
+@property (nonatomic, strong) NSArray<UIImageView *> *indicatorViews;
+
+// Data
+@property (nonatomic, assign) BOOL forceUpdate;
+
+@end
+
+@implementation TYPageControl
+
+#pragma mark - life cycle
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self configurePropertys];
+    }
+    return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)aDecoder {
+    if (self = [super initWithCoder:aDecoder]) {
+        [self configurePropertys];
+    }
+    return self;
+}
+
+- (void)configurePropertys {
+    self.userInteractionEnabled = NO;
+    _forceUpdate = NO;
+    _animateDuring = 0.3;
+    _pageIndicatorSpaing = 10;
+    _indicatorImageContentMode = UIViewContentModeCenter;
+    _pageIndicatorSize = CGSizeMake(6,6);
+    _currentPageIndicatorSize = _pageIndicatorSize;
+    _pageIndicatorTintColor = [UIColor colorWithRed:128/255. green:128/255. blue:128/255. alpha:1];
+    _currentPageIndicatorTintColor = [UIColor whiteColor];
+}
+
+- (void)willMoveToSuperview:(UIView *)newSuperview {
+    [super willMoveToSuperview:newSuperview];
+    if (newSuperview) {
+        _forceUpdate = YES;
+        [self updateIndicatorViews];
+        _forceUpdate = NO;
+    }
+}
+
+#pragma mark - getter setter
+
+- (CGSize)contentSize {
+    CGFloat width = (_indicatorViews.count - 1) * (_pageIndicatorSize.width + _pageIndicatorSpaing) + _pageIndicatorSize.width + _contentInset.left +_contentInset.right;
+    CGFloat height = _currentPageIndicatorSize.height + _contentInset.top + _contentInset.bottom;
+    return CGSizeMake(width, height);
+}
+
+- (void)setNumberOfPages:(NSInteger)numberOfPages {
+    if (numberOfPages == _numberOfPages) {
+        return;
+    }
+    _numberOfPages = numberOfPages;
+    if (_currentPage >= numberOfPages) {
+        _currentPage = 0;
+    }
+    [self updateIndicatorViews];
+    if (_indicatorViews.count > 0) {
+        [self setNeedsLayout];
+    }
+}
+
+- (void)setCurrentPage:(NSInteger)currentPage {
+    if (_currentPage == currentPage || _indicatorViews.count <= currentPage) {
+        return;
+    }
+    _currentPage = currentPage;
+    if (!CGSizeEqualToSize(_currentPageIndicatorSize, _pageIndicatorSize)) {
+        [self setNeedsLayout];
+    }
+    [self updateIndicatorViewsBehavior];
+    if (self.userInteractionEnabled) {
+        [self sendActionsForControlEvents:UIControlEventValueChanged];
+    }
+}
+
+- (void)setCurrentPage:(NSInteger)currentPage animate:(BOOL)animate {
+    if (animate) {
+        [UIView animateWithDuration:_animateDuring animations:^{
+            [self setCurrentPage:currentPage];
+        }];
+    }else {
+        [self setCurrentPage:currentPage];
+    }
+}
+
+- (void)setPageIndicatorImage:(UIImage *)pageIndicatorImage {
+    _pageIndicatorImage = pageIndicatorImage;
+    [self updateIndicatorViewsBehavior];
+}
+
+- (void)setCurrentPageIndicatorImage:(UIImage *)currentPageIndicatorImage {
+    _currentPageIndicatorImage = currentPageIndicatorImage;
+    [self updateIndicatorViewsBehavior];
+}
+
+- (void)setPageIndicatorTintColor:(UIColor *)pageIndicatorTintColor {
+    _pageIndicatorTintColor = pageIndicatorTintColor;
+    [self updateIndicatorViewsBehavior];
+}
+
+- (void)setCurrentPageIndicatorTintColor:(UIColor *)currentPageIndicatorTintColor {
+    _currentPageIndicatorTintColor = currentPageIndicatorTintColor;
+    [self updateIndicatorViewsBehavior];
+}
+
+- (void)setPageIndicatorSize:(CGSize)pageIndicatorSize {
+    if (CGSizeEqualToSize(_pageIndicatorSize, pageIndicatorSize)) {
+        return;
+    }
+    _pageIndicatorSize = pageIndicatorSize;
+    if (CGSizeEqualToSize(_currentPageIndicatorSize, CGSizeZero) || (_currentPageIndicatorSize.width < pageIndicatorSize.width && _currentPageIndicatorSize.height < pageIndicatorSize.height)) {
+        _currentPageIndicatorSize = pageIndicatorSize;
+    }
+    if (_indicatorViews.count > 0) {
+        [self setNeedsLayout];
+    }
+}
+
+- (void)setPageIndicatorSpaing:(CGFloat)pageIndicatorSpaing {
+    _pageIndicatorSpaing = pageIndicatorSpaing;
+    if (_indicatorViews.count > 0) {
+        [self setNeedsLayout];
+    }
+}
+
+- (void)setCurrentPageIndicatorSize:(CGSize)currentPageIndicatorSize {
+    if (CGSizeEqualToSize(_currentPageIndicatorSize, currentPageIndicatorSize)) {
+        return;
+    }
+    _currentPageIndicatorSize = currentPageIndicatorSize;
+    if (_indicatorViews.count > 0) {
+        [self setNeedsLayout];
+    }
+}
+
+- (void)setContentHorizontalAlignment:(UIControlContentHorizontalAlignment)contentHorizontalAlignment {
+    [super setContentHorizontalAlignment:contentHorizontalAlignment];
+    if (_indicatorViews.count > 0) {
+        [self setNeedsLayout];
+    }
+}
+
+- (void)setContentVerticalAlignment:(UIControlContentVerticalAlignment)contentVerticalAlignment {
+    [super setContentVerticalAlignment:contentVerticalAlignment];
+    if (_indicatorViews.count > 0) {
+        [self setNeedsLayout];
+    }
+}
+
+#pragma mark - update indicator
+
+- (void)updateIndicatorViews {
+    if (!self.superview && !_forceUpdate) {
+        return;
+    }
+    if (_indicatorViews.count == _numberOfPages) {
+        [self updateIndicatorViewsBehavior];
+        return;
+    }
+    NSMutableArray *indicatorViews = _indicatorViews ? [_indicatorViews mutableCopy] :[NSMutableArray array];
+    if (indicatorViews.count < _numberOfPages) {
+        for (NSInteger idx = indicatorViews.count; idx < _numberOfPages; ++idx) {
+            UIImageView *indicatorView = [[UIImageView alloc]init];
+            indicatorView.contentMode = _indicatorImageContentMode;
+            [self addSubview:indicatorView];
+            [indicatorViews addObject:indicatorView];
+        }
+    }else if (indicatorViews.count > _numberOfPages) {
+        for (NSInteger idx = indicatorViews.count - 1; idx >= _numberOfPages; --idx) {
+            UIImageView *indicatorView = indicatorViews[idx];
+            [indicatorView removeFromSuperview];
+            [indicatorViews removeObjectAtIndex:idx];
+        }
+    }
+    _indicatorViews = [indicatorViews copy];
+    [self updateIndicatorViewsBehavior];
+}
+
+- (void)updateIndicatorViewsBehavior {
+    if (_indicatorViews.count == 0 || (!self.superview && !_forceUpdate)) {
+        return;
+    }
+    if (_hidesForSinglePage && _indicatorViews.count == 1) {
+        UIImageView *indicatorView = _indicatorViews.lastObject;
+        indicatorView.hidden = YES;
+        return;
+    }
+    NSInteger index = 0;
+    for (UIImageView *indicatorView in _indicatorViews) {
+        if (_pageIndicatorImage) {
+            indicatorView.contentMode = _indicatorImageContentMode;
+            indicatorView.image = _currentPage == index ? _currentPageIndicatorImage : _pageIndicatorImage;
+        }else {
+            indicatorView.image = nil;
+            indicatorView.backgroundColor = _currentPage == index ? _currentPageIndicatorTintColor : _pageIndicatorTintColor;
+        }
+        indicatorView.hidden = NO;
+        ++index;
+    }
+}
+
+#pragma mark - layout
+
+- (void)layoutIndicatorViews {
+    if (_indicatorViews.count == 0) {
+        return;
+    }
+    CGFloat orignX = 0;
+    CGFloat centerY = 0;
+    CGFloat pageIndicatorSpaing = _pageIndicatorSpaing;
+    switch (self.contentHorizontalAlignment) {
+        case UIControlContentHorizontalAlignmentCenter:
+            // ignore contentInset
+            orignX = (CGRectGetWidth(self.frame) - (_indicatorViews.count - 1) * (_pageIndicatorSize.width + _pageIndicatorSpaing) - _currentPageIndicatorSize.width)/2;
+            break;
+        case UIControlContentHorizontalAlignmentLeft:
+            orignX = _contentInset.left;
+            break;
+        case UIControlContentHorizontalAlignmentRight:
+            orignX = CGRectGetWidth(self.frame) - ((_indicatorViews.count - 1) * (_pageIndicatorSize.width + _pageIndicatorSpaing) + _currentPageIndicatorSize.width) - _contentInset.right;
+            break;
+        case UIControlContentHorizontalAlignmentFill:
+            orignX = _contentInset.left;
+            if (_indicatorViews.count > 1) {
+                pageIndicatorSpaing = (CGRectGetWidth(self.frame) - _contentInset.left - _contentInset.right - _pageIndicatorSize.width - (_indicatorViews.count - 1) * _pageIndicatorSize.width)/(_indicatorViews.count - 1);
+            }
+            break;
+        default:
+            break;
+    }
+    switch (self.contentVerticalAlignment) {
+        case UIControlContentVerticalAlignmentCenter:
+            centerY = CGRectGetHeight(self.frame)/2;
+            break;
+        case UIControlContentVerticalAlignmentTop:
+            centerY = _contentInset.top + _currentPageIndicatorSize.height/2;
+            break;
+        case UIControlContentVerticalAlignmentBottom:
+            centerY = CGRectGetHeight(self.frame) - _currentPageIndicatorSize.height/2 - _contentInset.bottom;
+            break;
+        case UIControlContentVerticalAlignmentFill:
+            centerY = (CGRectGetHeight(self.frame) - _contentInset.top - _contentInset.bottom)/2 + _contentInset.top;
+            break;
+        default:
+            break;
+    }
+    NSInteger index = 0;
+    for (UIImageView *indicatorView in _indicatorViews) {
+        if (_pageIndicatorImage) {
+            indicatorView.layer.cornerRadius = 0;
+        }else {
+            indicatorView.layer.cornerRadius = _currentPage == index ? _currentPageIndicatorSize.height/2 : _pageIndicatorSize.height/2;
+        }
+        CGSize size = index == _currentPage ? _currentPageIndicatorSize : _pageIndicatorSize;
+        indicatorView.frame = CGRectMake(orignX, centerY - size.height/2, size.width, size.height);
+        orignX += size.width + pageIndicatorSpaing;
+        ++index;
+    }
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    [self layoutIndicatorViews];
+}
+
+@end

+ 25 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-acknowledgements.markdown

@@ -689,6 +689,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
 
+## TYCyclePagerView
+
+MIT License
+
+Copyright (c) 2017 yeBlueColor
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
 ## lottie-ios
 
                                  Apache License

+ 31 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-acknowledgements.plist

@@ -828,6 +828,37 @@ THE SOFTWARE.
 		</dict>
 		<dict>
 			<key>FooterText</key>
+			<string>MIT License
+
+Copyright (c) 2017 yeBlueColor
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>TYCyclePagerView</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
 			<string>                                 Apache License
                            Version 2.0, January 2004
                         https://www.apache.org/licenses/

+ 1 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Debug-input-files.xcfilelist

@@ -20,4 +20,5 @@ ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
 ${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework
 ${BUILT_PRODUCTS_DIR}/SwiftSVG/SwiftSVG.framework
 ${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework
+${BUILT_PRODUCTS_DIR}/TYCyclePagerView/TYCyclePagerView.framework
 ${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework

+ 1 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Debug-output-files.xcfilelist

@@ -19,4 +19,5 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSVG.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TYCyclePagerView.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework

+ 1 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Release-input-files.xcfilelist

@@ -20,4 +20,5 @@ ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
 ${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework
 ${BUILT_PRODUCTS_DIR}/SwiftSVG/SwiftSVG.framework
 ${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework
+${BUILT_PRODUCTS_DIR}/TYCyclePagerView/TYCyclePagerView.framework
 ${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework

+ 1 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks-Release-output-files.xcfilelist

@@ -19,4 +19,5 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftSVG.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TYCyclePagerView.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework

+ 2 - 0
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala-frameworks.sh

@@ -197,6 +197,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftSVG/SwiftSVG.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/TYCyclePagerView/TYCyclePagerView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework"
 fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
@@ -221,6 +222,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftSVG/SwiftSVG.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/TYCyclePagerView/TYCyclePagerView.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework"
 fi
 if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then

+ 3 - 3
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala.debug.xcconfig

@@ -1,11 +1,11 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView/TYCyclePagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
 LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "UIKit" -framework "WebKit"
+OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "TYCyclePagerView" -framework "UIKit" -framework "WebKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

+ 3 - 3
Koala/Pods/Target Support Files/Pods-Koala/Pods-Koala.release.xcconfig

@@ -1,11 +1,11 @@
 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView/TYCyclePagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
 LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
 LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
-OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "UIKit" -framework "WebKit"
+OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "TYCyclePagerView" -framework "UIKit" -framework "WebKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

+ 3 - 3
Koala/Pods/Target Support Files/Pods-KoalaTests/Pods-KoalaTests.debug.xcconfig

@@ -1,8 +1,8 @@
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "UIKit" -framework "WebKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView/TYCyclePagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "TYCyclePagerView" -framework "UIKit" -framework "WebKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 3 - 3
Koala/Pods/Target Support Files/Pods-KoalaTests/Pods-KoalaTests.release.xcconfig

@@ -1,8 +1,8 @@
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "UIKit" -framework "WebKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView/TYCyclePagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "TYCyclePagerView" -framework "UIKit" -framework "WebKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 3 - 3
Koala/Pods/Target Support Files/Pods-KoalaUITests/Pods-KoalaUITests.debug.xcconfig

@@ -1,8 +1,8 @@
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "UIKit" -framework "WebKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView/TYCyclePagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "TYCyclePagerView" -framework "UIKit" -framework "WebKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 3 - 3
Koala/Pods/Target Support Files/Pods-KoalaUITests/Pods-KoalaUITests.release.xcconfig

@@ -1,8 +1,8 @@
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
-FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
+FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
-OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "UIKit" -framework "WebKit"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GzipSwift/Gzip.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LiveChat/LiveChat.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGDatePicker/PGDatePicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PGPickerView/PGPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveCocoa/ReactiveCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReactiveSwift/ReactiveSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SideMenu/SideMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftSVG/SwiftSVG.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView/TYCyclePagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreGraphics" -framework "CryptoSwift" -framework "FMDB" -framework "Foundation" -framework "Gzip" -framework "HandyJSON" -framework "IQKeyboardManagerSwift" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "LiveChat" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "PGDatePicker" -framework "PGPickerView" -framework "QuartzCore" -framework "ReactiveCocoa" -framework "ReactiveSwift" -framework "SVProgressHUD" -framework "SideMenu" -framework "SnapKit" -framework "Starscream" -framework "SwiftSVG" -framework "SwiftyJSON" -framework "TYCyclePagerView" -framework "UIKit" -framework "WebKit"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_PODFILE_DIR_PATH = ${SRCROOT}/.

+ 26 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.2.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 5 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_TYCyclePagerView : NSObject
+@end
+@implementation PodsDummy_TYCyclePagerView
+@end

+ 12 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 19 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView-umbrella.h

@@ -0,0 +1,19 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "TYCyclePagerTransformLayout.h"
+#import "TYCyclePagerView.h"
+#import "TYPageControl.h"
+
+FOUNDATION_EXPORT double TYCyclePagerViewVersionNumber;
+FOUNDATION_EXPORT const unsigned char TYCyclePagerViewVersionString[];
+

+ 11 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView.debug.xcconfig

@@ -0,0 +1,11 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/TYCyclePagerView
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 6 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView.modulemap

@@ -0,0 +1,6 @@
+framework module TYCyclePagerView {
+  umbrella header "TYCyclePagerView-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 11 - 0
Koala/Pods/Target Support Files/TYCyclePagerView/TYCyclePagerView.release.xcconfig

@@ -0,0 +1,11 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TYCyclePagerView
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/TYCyclePagerView
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

部分文件因为文件数量过多而无法显示