iOS開發框架CollectioniOS(持續更新中)

CollectioniOS聚合了項目搭建的一些基本模塊,節約開發者時間,協助項目的快速搭建,可以知足一個項目的基本實現。git

github地址:github.com/usernameyan…
簡書地址:www.jianshu.com/p/a445521e7…

框架的引入

  • pod 'CollectioniOS','~>1.0.8'

更新說明

v1.0.8(增長如下功能)

1.應用基本配置:應用內國際化語言配置、應用名稱國際化。
2.UTTableView/UICollectionView的封裝以及通用用法。
3.YYNavigationBar:頂部導航欄的封裝以及使用。
4.YYAutoLayout:自動佈局的使用。
5.YYTabBar:底部分頁導航欄的封裝以及使用。
6.YYPageView的封裝以及使用。
7.YYPageMenu:滑動菜單的封裝以及使用。
8.YYRefresh:下拉刷新/上拉加載更多控件的封裝以及使用。
9.YYImageLoader:網絡圖片加載(可加載普通網絡圖片、gif,可設置緩存時間、緩存大小)。
10.YYDialog:通用提示框的封裝、Toast的封裝
11.YYHttpUtils:網絡請求的封裝(普通的網絡請求、文件下載、圖片上傳)
12.YYDataShowView:數據加載顯示樣式(沒有數據、網絡錯誤、正在加載)github

項目介紹

文章目錄

1.應用基本配置json

  • 應用內國際化語言配置
  • 應用名稱國際化

2.UTTableView的封裝使用api

  • 經過YYTableViewManager對UITableView進行統一管理使用
  • 自定義分割線
  • 列表增長頭部視圖
  • 實現ExpandableList的效果
  • Cell實現自適應高度
  • UITableView增長可伸縮頭部
  • 實現Cell滑動刪除
  • 多佈局的實現
  • UITableView實現分類效果

3.UICollectionView/UIScrollView的基礎使用數組

  • UICollectionView通用佈局,可快速設置行數、高度
  • UICollectionView增長可伸縮頭部
  • UIScrollView增長可伸縮頭部

4.YYNavigationBar:頂部導航欄緩存

  • YYNavigationBar的封裝使用

5.YYAutoLayout:自動佈局服務器

  • YYAutoLayout的簡單使用

6.YYTabBar:底部分頁導航欄網絡

  • TabBar的基本樣、自定義選中顏色、默認TabBar下標、點擊彈簧效果
  • TabBar和NavigationBar結合使用
  • TabBar不規則排序以及自定義點擊事件
  • 背景顏色效果(不帶title)、背景顏色帶有彈簧選中效果(不帶title)、背景顏色突出顯示(不帶title)、暗示用戶點擊
  • TabBar默認提示框(TabBarBadgeValue內容設置、提示顏色、隱藏)
  • 自定義TabBarItemView,可設置字體顏色、圖片顏色、設置自定義提示框、提示動做

7.YYPageView:圖片輪播數據結構

  • YYPageView的封裝使用

8.YYPageMenu:滑動菜單app

  • YYPageMenu的封裝使用

9.YYRefresh:下拉刷新/上拉加載更多

  • 默認下拉刷新/上拉加載更多樣式
  • 自定義下拉刷新/上拉加載更多樣式

10.YYImageLoader:網絡圖片加載

  • 加載普通圖片
  • 加載gif圖
  • 自定義加載圖片的參數

11.YYDialog:通用提示框

  • 提示框的使用
  • 加載框的使用
  • Toast提示

12.YYHttpUtils:網絡請求

  • 基本網絡請求
  • 文件下載
  • 圖片上傳
  • 網絡請求的參數設置(包含請求超時、緩存時間等)

13.YYDataShowView:數據加載顯示頁面

  • 通用數據加載提示框的使用

14.通用工具類

  • 通用工具的使用

具體使用

1、應用基本配置

1.應用內國際化語言配置

實現流程:
1.在項目建立一個Strings File 命名爲 Localizable.strings
2.選擇Localizable.strings文件 點擊localizaiton,選擇所需語種
3.其中第2點顯示的語種若是沒有所需的能夠點擊項目->PROJECT下面的文件->info->找到Localizations添加
4.使用InternationalUtils類進行內容獲取和系統語言切換:
  (1)在AppDelegate中經過InternationalUtils.getInstance.initUserLanguage()進行初始化
  (2)經過InternationalUtils.getInstance.getString(name)獲取Localizable.string字符串對應的內容       
  (3)經過InternationalUtils.getInstance.setLanguage(LanguageType,rootViewController)進行語言切換,其中注意的是須要傳入根Controller
  (4)經過InternationalUtils.getCurrentLanguage()獲取當前語言
複製代碼
2.應用名稱國際化
(1)建立Strings File文件,並命名爲InfoPlist.strings
(2)選中建立好的文件,點擊右側Localize,勾選所需語言
(3)配置InfoPlist.strings:CFBundleDisplayName = 
複製代碼

2、UTTableView的封裝使用

1.YYTableViewManager使用
  • 若是沒有什麼特別需求的能夠直接實現YYIBaseTableViewController,裏面已經把基本的封裝完成:

    class AutoCalHeightController:YYIBaseTableViewController{
            var arrayM:NSMutableArray?
    
             override func viewDidLoad() {
               super.viewDidLoad()
                self.view.backgroundColor=UIColor.white
                tableView.separatorStyle = .none
                 // Add main section
                let section = YYTableViewSection()
                manager.add(section: section)
                manager.register(CommonTableViewCell.self, CommonTableItem.self)
                //數據組裝
                self.arrayM=NSMutableArray()
                self.arrayM!.add("qqqq")
                for str in arrayM!{
                    let item = CommonTableItem()
                     item.desc=str as? String
                    section.add(item: item)
               }
         }
     }
    複製代碼
  • 若是不實現YYIBaseTableViewController,可經過:

    //把UITableView設置給YYTableViewManager進行管理使用
    let manager = YYTableViewManager(tableView: self.tableView)
    複製代碼
  • YYTableViewManager使用組成,基本包含YYTableViewSection(UITabView每組item的頭部)、Cell的構成:YYTableViewItem、YYTableViewCell

  • YYTableViewManager

屬性 做用
register(_ nibClass: AnyClass, _ item: AnyClass, _ bundle: Bundle = Bundle.main 註冊YYTabViewCell和YYTabViewItem
numberOfSections(in _: UITableView) 當前Section的下標
numberOfSections(in _: UITableView) 當前Section的下標
add(section: YYTableViewSection) 增長Section頭部視圖
remove(section: Any) 移除Section頭部視圖
removeAllSections() 移除全部Section頭部視圖
reloadData() 從新加載UITabView數據
  • YYTableViewSection
屬性 做用
headerHeight 頭部視圖高度
footerHeight 尾部視圖高度
init() 使用默認的頭部視圖,若是不設定頭部任何參數就默認是不顯示的
init(headerView: UIView!) 增長自定義頭部視圖
init(footerView: UIView?) 增長自定義尾部視圖
init(headerView: UIView?, footerView: UIView?) 增長自定義頭部視圖和尾部視圖
add(item: YYTableViewItem) 增長頭視圖下面的item
remove(item: YYTableViewItem) 移除頭部視圖下面的item
removeAllItems() 移除頭視圖下面的全部item
replaceItemsFrom(array: [YYTableViewItem]!) 替換頭部視圖下面的全部item
insert(_ item: YYTableViewItem!, afterItem: YYTableViewItem, animate: UITableView.RowAnimation = .automatic) 在某個item後面插入新的item
insert(_ items: [YYTableViewItem], afterItem: YYTableViewItem, animate: UITableView.RowAnimation = .automatic) 在某個item後面插入item數組
delete(_ itemsToDelete: [YYTableViewItem], animate: UITableView.RowAnimation = .automatic) 刪除頭部視圖中某個item
reload(_ animation: UITableView.RowAnimation) 從新加載Section組下的數據
  • YYTableViewCell
屬性 做用
item 在register時和Cell綁定的YYTableItem,主要是數據的傳遞
cellWillAppear() Cell顯示的時候會調用這個回調
cellDidDisappear() Cell消失時會調用這個回調
setSelected() Cell設置選擇狀態
  • YYTableViewItem
屬性 做用
tableViewManager 綁定的YYTableViewManager
section 綁定的YYTableViewSection
cellTitle 設定默認Cell標題的字段
cellHeight Cell的高度
cellStyle Cell的樣式
func setSelectionHandler(selectHandler: YYTableViewItemBlock?) Item的點擊事件回調
setDeletionHandler(deletionHandler: YYTableViewItemBlock?) Item的刪除事件回調
separatorInset 分割線內邊距
editingStyle Item的編輯狀態
isHideSeparator Item是否隱藏分割線
separatorLeftMargin 分割線外邊距
indexPath Item的下標
reload(_ animation: UITableView.RowAnimation) Item數據從新加載
delete(_ animation: UITableView.RowAnimation = .automatic) Item數據的刪除
updateHeight() 更新高度
autoHeight() 自動計算高度
  • 基本用法:

    //初始化Manager
     let manager = YYTableViewManager(tableView: self.tableView)
     //增長一個頭部視圖
     let section = YYTableViewSection()
     manager.add(section: section)
     //註冊YYTableViewCell以及YYTableViewItem
     manager.register(CommonTableViewCell.self, CommonTableItem.self)
    //Section增長item
    section.add(item: item)
    manager.reloadData()
    複製代碼
  • 自定義YYTableViewCell和YYTableViewItem

    class CommonTableItem:YYTableViewItem{
          //自定義一些數據結構
          var desc: String!
          //自定義高度
          override init() {
              super.init()
              cellHeight=30
          }
    }
    
    
    class CommonTableViewCell:YYTableViewCell{
    
        override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
            super.init(style: style, reuseIdentifier: reuseIdentifier)
        }
    
        required init?(coder aDecoder: NSCoder) {
           super.init(coder: aDecoder)
        }
        // cell即將出如今屏幕中的回調方法 在這個方法裏面賦值
        override func cellWillAppear() {
             let item = self.item as! CommonTableItem
        }
    }
    複製代碼
  • 自定義分割線

    在自定義YYTableViewCell中重寫如下方法
    override func draw(_ rect: CGRect) {
          //獲取繪圖上下文
      guard let context = UIGraphicsGetCurrentContext() else {
         return
      }
       //#FF4500
      context.setStrokeColor(UIColor.colorWithHexString("#D2D3D5").cgColor)
      context.stroke(CGRect(x:0, y: rect.size.height, width: rect.size.width, height:1))
    }
    複製代碼
  • 列表增長頭部視圖

    for i in 0 ... 8 {
          let headerView:SelectionHeader=SelectionHeader.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40))
          headerView.setContent(con: "Header " + String(i))
          let section = YYTableViewSection.init(headerView: headerView)
          manager.add(section: section)
          for j in 0 ... 4 {
              section.add(item: YYTableViewItem(title: "Header " + String(i) + " Row " + String(j)))
          }
      }
    複製代碼
  • 實現ExpandableList的效果

    1.實現YYExpandTreeCellItem
    2.代碼實現
    // level 0
      let item0 = ExpanableListItem1()
      item0.level = 0
      section.add(item: item0)
      // 若是isExpand爲true,則下一級的item(也就是item1)必須加入section
      item0.isExpand = true
      // level 1
      for _ in 0 ..< 3 {
          let item1 = ExpanableListItem2()
          // level僅用於記錄層級,能夠不賦值
          item1.level = 1
          item1.isExpand = false
          section.add(item: item1)
          item0.arrNextLevel.append(item1)
    
          // level 2
          for _ in 0 ..< 3 {
              let item2 = ExpanableListItem3()
              // 若是isExpand爲false,則後面就不用把item加入section
              item2.isExpand = false
              item1.arrNextLevel.append(item2)
          }
      }
    複製代碼
  • Cell實現自適應高度

    let item = CommonTableItem()
     item.desc=str as? String
     item.autoHeight(manager)//自適應高度設置語句
     section.add(item: item)
    複製代碼
  • UITableView增長可伸縮頭部

    1.實現YYStretchyHeaderView(在自定義頭部的時候使用約束佈局須要特別注意,若是約束佈局出現問題會致使伸縮出現問題)
    2.tableView.addSubview(ScaleHeaderView(frame: self.view.bounds))
    複製代碼
  • 實現Cell滑動刪除

    for _ in 0 ..< 20 {
          let item = CommonTableItem()
          item.desc="左滑可刪除item"
          item.editingStyle = .delete//設置編輯狀態爲刪除
          section.add(item: item)
          //設置刪除監聽
          item.setDeletionHandler(deletionHandler: { [weak self] (item) in
              self?.deleteConfirm(item: item as! CommonTableItem)
          })
      }
    複製代碼
  • 多佈局的實現

    let section = YYTableViewSection()
      manager.add(section: section)
      manager.register(PictureCell.self, PictureItem.self)
      manager.register(TextCell.self, TextItem.self)
      for index in 0...30{
          if(index%2==0){
              let picture = PictureItem()
              picture.content=""
              picture.autoHeight(manager)
              section.add(item: picture)
          }else{
              let textItem = TextItem()
              textItem.content=""
              textItem.autoHeight(manager)
              section.add(item: textItem)
          }
      }
    複製代碼
  • UITableView實現分類效果 具體實現請看demo代碼實現

3、UICollectionView/UIScrollView的基礎使用

1. UICollectionView的快速使用
  • CommonCollectionViewLayout
屬性 做用
init(lineSpacing: CGFloat, columnSpacing: CGFloat, sectionInsets: UIEdgeInsets) 佈局初始化,可設置行間距、列間距、外框邊距
  • CommonCollectionViewLayoutDelegate
屬性 做用
columnOfLayout(_ collectionView: UICollectionView) 設置UICollectionView的列數
itemHeight(_ collectionView: UICollectionView, layout commonCollectionViewLayout: CommonCollectionViewLayout, heightForItemAt indexPath: IndexPath) 設置item的高度
使用步驟
  • (1)設置CommonCollectionViewLayout

    let flowLayout = CommonCollectionViewLayout.init(lineSpacing: 10, columnSpacing:10, sectionInsets: UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5))
    flowLayout!.delegate=self
    
    collectionView=UICollectionView(frame: self.view.frame, collectionViewLayout: self.flowLayout!)
    collectionView!.dataSource=self
    self.collectionView!.delegate=self
    //註冊cell
    
    self.collectionView!.register(CommonUICollectionViewCell.classForCoder(), forCellWithReuseIdentifier: reuseidentifier)
    複製代碼
  • (1)實現CommonCollectionViewLayoutDelegate

    extension CommonUICollectionViewController:CommonCollectionViewLayoutDelegate,UICollectionViewDelegate, UICollectionViewDataSource{
      func columnOfLayout(_ collectionView: UICollectionView) -> Int {
        code
      }
      func itemHeight(_ collectionView: UICollectionView, layout commonCollectionViewLayout: CommonCollectionViewLayout, heightForItemAt indexPath: IndexPath) -> CGFloat {
        code
      }
    }
    複製代碼
2. UICollectionView/UIScrollView增長可伸縮頭部

請參照上面UITableView的用法

4、YYNavigationBar:頂部導航欄

1.YYNavigationBar基本屬性
屬性 做用
setHidden(...) 隱藏NavigationBar
setAlpha(...) 設置NavigationBar的透明度
setBarBackgroundColor(...) 設置NavigationBar的背景顏色
setTitleColor(...) 設置NavigationBar的標題顏色
setTitleSize(...) 設置NavigationBar的標題大小
setShadowImage(...) 設置NavigationBar的陰影圖片
setShadowHidden(...) 設置NavigationBar的陰影是否隱藏
setShadow(...) 設置NavigationBar的陰影
setTitleTextAttributes(...) 設置NavigationBar的標題的Attributes
setTranslucent(...) 設置NavigationBar是否透明
setBarStyle(...) 設置NavigationBar是樣式
setBackgroundImage(...) 設置NavigationBar背景圖片,若是設置圖片會覆蓋背景顏色
setTitle(...) 設置NavigationBar標題
setBackBarButtonItem(...) 設置NavigationBar返回Item
setBackBarButtonItem(...) 設置NavigationBar返回Item
setLeftButtonItem(...) 設置NavigationBar左邊菜單Item
setLeftButtonItems(...) 設置NavigationBar左邊菜單Item
setRightButtonItem(...) 設置NavigationBar右邊菜單Item
setRightButtonItems(...) 設置NavigationBar左邊菜單Item數組
2.YYNavigationBar全局設置Configuration
屬性 做用
isHidden 隱藏NavigationBar
alpha NavigationBar的透明度
tintColor NavigationBar的標題顏色
shadowImage 設置NavigationBar的陰影圖片
isShadowHidden 隱藏NavigationBar的陰影
titleTextAttributes NavigationBar的Attributes
isTranslucent 設置NavigationBar透明
setBackgroundImage 設置NavigationBar的背景圖片
3.鏈式使用
NavigationUtils
        .with(controller: self)
        .setBarBackgroundColor(barTintColor: UIColor.red)
        .setTitle(title: InternationalUtils.getInstance.getString("nav_use"))
        .setBackBarButtonItem(style: .image(UIImage(named: "back_btn")),tintColor: UIColor.gray)
        .build(
複製代碼

5、YYAutoLayout:自動佈局

鏈式使用
centerLabel
        .centerX(equalTo: view.yy_centerX)
        .centerY(equalTo: view.yy_centerY)
        .width(80)
        .height(40)
        .build()
複製代碼

6、YYTabBar:底部分頁導航欄

1.TabBarBasicParamBuilder基本屬性
屬性 做用
with(...) TabBarBasicParamBuilder的初始方法,可設置TabBar的圖片、標題
defultStyle() 獲取默認樣式設置,下面屬性歸屬defaultStyle()
setTextColor(...) 設置未選擇標題的顏色
setSelectTextColor(...) 設置選擇標題的顏色
setImgColor(...) 設置未選擇圖片顏色
setSelectImgColor(...) 設置選擇圖片顏色
bouncesAnimationStyle() 設置彈簧動畫
setRemindUseClickIndex(...) 設置用戶提醒點擊下標
irregularity() 不規則TabBarItem顯示,歸屬defultStyle(),下面屬性歸屬irregularity()
setIrregularityIndex(...) 設置不規則TabBarItem下標
setIrregularityBorderColor(...) 設置不規則圖標BorderColor
setIrregularityBorderWidth(...) 設置不規則TabBarItem外框寬度
setIrregularityBackgroundColor(...) 設置不規則TabBarItem背景顏色
retunDefaultStyle() 返回defuletStyle
backgroundColorWithoutTitlesAnimationStyle() 設置TarBarItem背景顏色不帶title,歸屬defultStyle(),下面屬性歸屬backgroundColorWithoutTitlesAnimationStyle()
irregularity() 不規則TabBarItem顯示,歸屬defultStyle(),下面屬性歸屬irregularity()
setItemBgColor(...) 設置未選擇TabBarItem背景顏色
setSelectItemBgColor(...) 設置選擇TabBarItem背景顏色
retunDefaultStyle() 返回defuletStyle
cumstomStyle() 獲取自定義樣式設置,下面屬性歸屬cumstomStyle()
setCumstonTabBarItemView(...) 設置自定義TarBarItem數組
2.TabBarSetting基本屬性
屬性 做用
init(...) 根據TabBarBasicParamBuilder初始化TabBarItem
setTabBarBackgroundColor(...) 設置TarBar背景顏色
setTabBarBackgroundImage(...) 設置TarBar背景圖片
setShouldHijackHandler(...) 設置TarBarItem點擊回調,返回true表明攔截自行處理,false表明不進行攔截處理
setDidHijackhHandler(...) 點擊回調處理
setDefaultTabIndex(...) 設置默認選擇下標
setTabBarBadgeValue(...) 設置某個TarBarItem的消息氣泡內容
hideTabBadgeValue(...) 隱藏某個TarBarItem的消息氣泡
setTabBarBadgeValueColor(...) 設置某個TarBarItem的消息氣泡顏色
3.YYTabBar的使用
  • 基本樣式使用

    let chidVC=[CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController()]
     
     
     let builder:TabBarBasicParamBuilder=TabBarBasicParamBuilder
         .with(childVCs: chidVC, normalImgs: normalImgs, selectImgs: selectImgs, titles: titles)
         .defultStyle()
         .setTextColor(txtColor: UIColor.black)
         .setSelectTextColor(selectTxtColor: UIColor.red)
         .setImgColor(imageColor: UIColor.black)
         .setSelectImgColor(selectImageColor: UIColor.red)
         .build()
     
     
     let _:TabBarSetting=TabBarSetting(vc:self,tabBarBuilder: builder)
    複製代碼
  • TarBarItem不規則樣式使用

    let chidVC=[CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController()]
     
     
     let builder:TabBarBasicParamBuilder=TabBarBasicParamBuilder
         .with(childVCs: chidVC, normalImgs: normalImgs, selectImgs: selectImgs, titles: titles)
         .defultStyle()
         .irregularity()
         .setIrregularityIndex(irregularIndex: 2)
         .setIrregularityBorderColor(borderColor: UIColor.white)
         .setIrregularityBackgroundColor(backgroundColor: UIColor.systemGreen)
         .retunDefaultStyle()
         .setSelectTextColor(selectTxtColor: UIColor.red)
         .setSelectImgColor(selectImageColor: UIColor.red)
         .build()
    
     let tab:TabBarSetting=TabBarSetting(vc:self,tabBarBuilder: builder)
     tab.setTabBarBackgroundImage(backgroundImage: UIImage(named: "background_dark"))
     tab.setShouldHijackHandler(shouldHijackHandler:{
         tabBarController,viewController,index in
         
         if(index==2){
             return true
         }else{
             return false
         }
         
     })
     
     tab.setDidHijackhHandler(didHijackHandler: {
         tabBarController,viewController,index in
     })
    複製代碼
  • 設置背景顏色顯示(不帶title)

    let chidVC=[CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController(),CommonWithoutNavController()]
     
     
     let builder:TabBarBasicParamBuilder=TabBarBasicParamBuilder
         .with(childVCs: chidVC, normalImgs: normalImgs, selectImgs: selectImgs, titles: titles)
         .defultStyle()
         .backgroundColorWithoutTitlesAnimationStyle()//設置背景顏色顯示(不帶title)
         .setSwithcBouncesAnimation(switchBgAnimation: true)//開啓彈簧動畫
         .setSpecialIndexAndColor(bgColorIndex: 2)//設置背景顏色突出顯示
         .retunDefaultStyle()
         .setRemindUseClickIndex(remindUseClickIndex: 2)//設置暗示用戶點擊
         .build()
     
     
     let _:TabBarSetting=TabBarSetting(vc:self,tabBarBuilder: builder)
    複製代碼
  • YYTabBar和YYNavigationBar結合使用

二者結合使用須要注意的是若是內容ControllerView按照原來的高度設置底部會被TabBar遮擋,爲了解決這個問題須要設置兩步
  • 第一步 在建立內容ControllerView以前須要計算出內容View的高度(UIViewController.autoHeight=UIScreen.main.bounds.height - self.tabBar.frame.height)

    let chidVC: [UIViewController] = titles.map { _ in
          UIViewController.autoHeight=UIScreen.main.bounds.height - self.tabBar.frame.height
          let vc: CommonWithNavController = CommonWithNavController()
          return vc
      }
      
      
      let builder:TabBarBasicParamBuilder=TabBarBasicParamBuilder
          .with(childVCs: chidVC, normalImgs: normalImgs, selectImgs: selectImgs, titles: titles)
          .defultStyle()
          .build()
      
      
      let _:TabBarSetting=TabBarSetting(vc:self,tabBarBuilder: builder)
    複製代碼
  • 第二步 內容ControllerView須要實現AutoHeightUIViewController

  • YYTabBar默認消息氣泡使用

    let tabBar:TabBarSetting=TabBarSetting(vc:self,tabBarBuilder: builder)
     tabBar.setTabBarBadgeValue(index: 0, badgeValue: "99+")
     tabBar.setTabBarBadgeValue(index: 1, badgeValue: " ")
     tabBar.setTabBarBadgeValue(index: 2, badgeValue: "")
     tabBar.setTabBarBadgeValue(index: 3, badgeValue: "New")
     tabBar.setTabBarBadgeValue(index:4, badgeValue: "1")
     tabBar.setTabBarBadgeValueColor(index: 4, color: UIColor.blue)
     tabBar.setShouldHijackHandler(shouldHijackHandler: {
         tabBarController,viewController,index in
         
         if(index==2){
             tabBar.hideTabBadgeValue(index: 2)
         }else if(index==4){
             tabBar.setTabBarBadgeValueColor(index: 4, color: UIColor.red)
         }
         return false
     })
    複製代碼
  • YYTabBar自定義TabBarItemView

1.YYTabBarItemContentView的介紹
屬性 做用
insets 設置contentView的偏移
selected 是否被選中
insets 設置contentView的偏移
highlighted 是否處於高亮狀態
highlightEnabled 是否支持高亮
textColor 文字顏色
highlightTextColor 高亮時文字顏色
iconColor icon顏色
backdropColor 背景顏色
highlightBackdropColor 高亮時背景顏色
title 標題
badgeValue 消息氣泡內容
badgeColor 消息氣泡顏色
badgeView 獲取消息氣泡View
selectAnimation(animated: Bool, completion: (() -> ())?) 設置選擇時動畫
reselectAnimation(animated: Bool, completion: (() -> ())?) 設置釋放時動畫
highlightAnimation(animated: Bool, completion: (() -> ())?) 設置高亮時動畫
dehighlightAnimation(animated: Bool, completion: (() -> ())?) 設置釋放高亮時動畫
badgeChangedAnimation(animated: Bool, completion: (() -> ())?) 設置消息動畫改變時動畫
2.實現YYTabBarItemContentView,自定義相關參數
3.設置自定義TabBarItemView
let cumstonItemView=[CumstonSettingItemView(),CumstonAnimateWithTipsContentView(),CumstonAnimateWithNumContentView(),CumstonAnimateWithImgContentView(),cumstonRemindItemView]
    
 let builder:TabBarBasicParamBuilder=TabBarBasicParamBuilder
        .with(childVCs: chidVC, normalImgs: normalImgs, selectImgs: selectImgs, titles: titles)
        .cumstomStyle()
        .setCumstonTabBarItemView(cumstomItemView: cumstonItemView)
        .build()
    
 let tab:TabBarSetting=TabBarSetting(vc:self,tabBarBuilder: builder)
複製代碼

7、YYPageView:圖片輪播

  • 建立PageView

    let pageView:YYPageView={
      let pageView:YYPageView=YYPageView.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 300))
      pageView.register(YYDefaltPageViewCell.self, forCellWithReuseIdentifier: "cell")
      pageView.transformer = YYPageViewTransformer(type:.none)
      pageView.pageControl.interitemSpacing=10
      return pageView
      }()
    複製代碼
  • 實現YYPagerViewDataSource,YYPagerViewDelegate

    //設置輪滾圖片的數量
      func numberOfItems(in pagerView: YYPageView) -> Int {
      return imageNames.count
      }
      //每一個輪滾內容的設定
      func pagerView(_ pagerView: YYPageView, cellForItemAt index: Int) -> UICollectionViewCell {
          let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) as! YYDefaltPageViewCell
          cell.imageView?.image=UIImage(named:imageNames[index] )
          cell.imageView?.contentMode = .scaleAspectFill
          cell.imageView?.clipsToBounds = true
          cell.textLabel?.text = String.init(format: "第%d張圖片", index)
          return cell
      }
    複製代碼
  • 其它用法參照demo

8、YYPageMenu:滑動菜單

1.YYPageMenu的基本使用(須要特別注意下面註釋說明部分)
let menu = YYPageMenu.init(frame:CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50),vc: self, titles: titles)
   //設置menu在NavigationBar下面
  PositionSettingUtils.position(aboveView: self.navigation.bar, childView: menu!, style: .adaptive)
  //設置內容View在menu下面
  PositionSettingUtils.position(aboveView: menu!, childView: menu!.page!.view, style: .fixed)
    
  self.view.addSubview(menu!)
    
    //爲了解決遮擋問題,須要在初始化內容View以前計算出高度,而且內容View須要實現AutoHeightUIViewController
   let viewControllers: [UIViewController] = self.titles.map { _ in
        UIViewController.autoHeight=menu!.page!.view.frame.height
        let vc: ChildPageViewController = ChildPageViewController(pageMenuVc: self)
        return vc
    }
    //初始化內容View
    menu!.page?.initController(viewControllers: viewControllers)
    var style:YYPageMenuStyle=YYPageMenuStyle()
    style.indicatorColor = .red
    style.indicatorCorner = .corner(value: 3)
    style.indicatorStyle = .line(widthType: .sizeToFit(minWidth: 20), position: .bottom((margin: 1, height: 2)))
    style.titleFont = UIFont.systemFont(ofSize: 18)
    style.selectedTitleColor=UIColor.red
    menu!.style=style
    menu!.backgroundColor=UIColor.yellow
    //menu選擇回調
    menu!.page!.didFinishPagingCallBack={
        currentViewController,currentIndex in
        self.menu!.setSelectIndex(index: currentIndex)
    }
複製代碼
2.YYPageMenuStyle的基本屬性
屬性 做用
indicatorColor 指示器顏色
indicatorStyle 指示器風格,類型爲YYPageMenuIndicatorStyle:橫線類型,line(widthType: YYPageMenuItemWidthType, position: YYPageMenulinePosition)/覆蓋類型,cover(widthType: YYPageMenuItemWidthType)
indicatorCorner 指示器圓角
labelWidthType label 寬度類型 固定寬度 或 隨文字適應寬度 ,類型主要爲YYPageMenuItemWidthType:鋪滿,fixed(width: CGFloat)/自適應,sizeToFit(minWidth: CGFloat)
titleFont 標題字體
normalTitleColor normalTitleColor
selectedTitleColor 選中標題顏色
iconColor icon顏色
backdropColor 背景顏色
highlightBackdropColor 高亮時背景顏色
title 標題
badgeValue 消息氣泡內容
badgeColor 消息氣泡顏色

9、YYRefresh:下拉刷新/上拉加載更多

  • 使用默認下拉刷新/上拉加載更多樣式

    let refreshView:YYDefaultRefreshHeaderAnimator=YYDefaultRefreshHeaderAnimator.init(frame: .zero)
     let footView:YYDefaultRefreshFooterAnimator=YYDefaultRefreshFooterAnimator.init(frame: .zero)
     
     self.tableView.yy.addPullToRefreshListener(animator: refreshView, handler: {
         [weak self] in
         self?.refresh()
         },aboveView: navigation.bar,childView: self.tableView)
     
     self.tableView.yy.addLoadMoreListener(animator: footView){
         [weak self] in
         self?.loadMore()
     }
    複製代碼
  • 默認控件YYDefaultRefreshHeaderAnimator/YDefaultRefreshFooterAnimator修改提示文本

屬性 做用
YYDefaultRefreshHeaderAnimator
pullToRefreshDescription 刷新提示文本
releaseToRefreshDescription 釋放提示文本
loadingDescription 正在加載提示文本
YDefaultRefreshFooterAnimator
loadingMoreDescription 上拉加載提示文本
noMoreDataDescription 沒有數據提示文本
loadingDescription 正在加載提示文本
  • 經常使用的方法
方法 做用
addPullToRefreshListener(animator: YYRefreshProtocol & YYRefreshAnimatorProtocol, handler: @escaping YYRefreshHandler,aboveView:UIView,childView:UIView) 添加下拉刷新樣式、刷新回調、以及在某個控件下面
addLoadMoreListener(animator: YYRefreshProtocol & YYRefreshAnimatorProtocol, handler: @escaping YYRefreshHandler) 添加上拉加載更多樣式、刷新回調
removeRefreshHeader() 移除下拉刷新控件
removeRefreshFooter() 移除上拉刷新控件
startPullToRefresh() 開始下拉刷新
autoPullToRefresh() 自動下拉刷新
stopPullToRefresh() 中止下拉刷新
noticeNoMoreData() 通知已經沒數據可加載
resetNoMoreData() 從新設置沒有數據
stopLoadingMore() 中止上拉加載刷新
  • 自定義加載控件 實現UIView,YYRefreshAnimatorProtocol,YYRefreshProtocol便可根據裏面提供的參數進行自定義,具體能夠參考demo

10、YYImageLoader:網絡圖片加載

  • 經常使用的方法
方法 做用
loadImage(urlString: String,placeholder: UIImage? = nil,completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil) 加載網絡圖片
loadImage(url: URL, placeholder: UIImage? = nil,completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil) 加載網絡圖片
loadImage(request: URLRequest,placeholder: UIImage? = nil,completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil) 加載網絡圖片
  • 全局的方法YYImageCache
方法 做用
diskCacheMaxAge 設置最大緩存時間
timeoutIntervalForRequest 請求超時
requestCachePolicy 圖片加載策略
  • 基本使用代碼

    imageView.loadImage(urlString: "https://n.sinaimg.cn/tech/transform/8/w334h474/20200107/57f4-imvsvyz4459804.gif",placeholder: UIImage.init(named: "b"))
    複製代碼

11、YYDialog:通用提示框

  • 默認提示框使用

AlertDialog

YYDialog
            .createAlertDialog()
            .defalutDialog()
            .setTitleColor(color: UIColor.red)
            .setTitleSize(ofSize: 20)
            .setContentColor(color: UIColor.gray)
            .setSubmitBtnSize(ofSize: 20)
            .setSubmitBtnContentColor(color: UIColor.green)
            .setAnimationOption(animationOption: .zoom)
            .setSubmitButtonListener(clickSubmitBlock: {
                _ in
                YYDialog
                    .createToast()
                    .show(view: self.view, text: "點擊了肯定按鈕")
            })
            .setButtonType(btnType: .both)
            .show(title: "提示", message: "由於你是這個世界上最乾淨的,最溫暖的,最柔軟的,我不能用那些通用的所謂聰明來解釋你,來對待你,來敷衍你。")
複製代碼

Toast

YYDialog
            .createToast()
            .show(view: self.view, text: "由於你是這個世界上最乾淨的,最溫暖的,最柔軟的,我不能用那些通用的所謂聰明來解釋你,來對待你,來敷衍你。")
複製代碼

LoadingDialog

let dialog = YYDialog
            .createLoadingDialog()
            .defalutDialog()
        
 dialog
         .setMessageSize(fontSize: 16)
          .setContentViewCornerRadius(radius: 5)
          .setMaskLayer(showMaskLayer: true)
          .setAnimationOption(animationOption: .zoom)
          .show(message: "請稍後...")
複製代碼
  • 自定義提示框
1.實現BaseDialogContentView
屬性 做用
_contentWidth 提示框寬度,BaseDialogContentView已設置默認值
_contentHeight 提示框高度,必設值
animationOption 提示框動畫,BaseDialogContentView已設置默認值
2.自定義使用方法
let dialog=YYDialog
            .createLoadingDialog()
            .customDialog(custom: CustomLoadingDialog())
        
 dialog.show()
複製代碼
  • 其它屬性修改請參照demo

12、YYHttpUtils:網絡請求

  • 基本網絡請求

    let urlStr = "https://api.apiopen.top/getJoke?page="+String(format: "%1d", pageNow)+"&count=20&type=video"
      
      let httpParams:HttpRequestParams=HttpRequestParams()
      httpParams
          .setRequestType(requestType: .reqStringUrl)
          .setReqUrl(requestUrl: urlStr)
          .setReponseType(responseType: .netWork)
          .setHttpTypeAndReqParamType(httpTypeAndReqParamType: .get)
          .build()
      
      YYHttpRequestUtils<Result<Array<ContentInfo>>>.request(httpRequestParams: httpParams, requestSuccessResult: {
          value in
          //數據完成以後須要從新刷新數據
          //self.manager.reloadData()
      }, requestFailureResult: {
          error in
      })
    複製代碼
注意:YYHttpRequestUtils在請求時候須要傳入一個泛型類做爲json數據的轉換數據結構,bean類須要實現Convertible才能轉化
  • YYHttpRequestUtils
屬性 做用
request(參數) 網絡請求方法
cancel(httpRequestParams:HttpRequestParams) 取消請求
removeAllCache(completion: @escaping (Bool)->()) 清除全部緩存
removeObjectCache(httpRequestParams:HttpRequestParams, completion: @escaping (Bool)->()) 根據url和params清除緩存
removeObjectCache(httpRequestParams:HttpRequestParams, completion:
  • HttpRequestParams
屬性 做用
setReponseType(responseType:ReponseType) 設置響應方式,cache:返回緩存數據,netWork:返回網絡數據,noCacheRetrunNetWork:緩存優先
setHttpTypeAndReqParamType(參數) 設置請求方法以及請求參數類型,post_json:method爲post,請求參數爲json格式,pos_param:method爲post,請求參數爲鍵值對,get:method爲get
setReqUrl(requestUrl:String) 設置請求Url
setUrlRequest(urlRequest: URLRequestConvertible) 設置請求URLRequest
setRequestType(requestType:RequestType) 設置請求的類型
setParams(params: Parameters) 設置請求參數
setParam(key:String,param:Any)- 設置請求參數
setHttpHeaders(headers: HTTPHeaders)- 設置請求頭
setHttpHeader(key:String,header:String) 設置請求頭
  • 文件下載
1. 每次進入下載頁面須要進行下載初始化
YYHttpDowloadUtils.resume(url: item.downloadUrl, downloadResume: {
        
 })
複製代碼
2. 文件下載
let downloadParams:HttpDownloadRequestParams=HttpDownloadRequestParams()
            downloadParams
                .setFileName(fileName: "\(item.indexPath.row)---.pdf")
                .setReqUrl(requestUrl: url!)
                .build()
            
YYHttpDowloadUtils.download(httpDownloadRequestParams: downloadParams, requestSuccessResult: {
                respone in
                
            },requestFailureResult: {
                error in
                
            },downloadProgress: {
                progress in
                
 })
複製代碼
  • HttpDownloadRequestParams
屬性 做用
setFileName(fileName:String) 設置下載文件名
setHttpTypeAndReqParamType(參數) 設置請求方法以及請求參數類型,post_json:method爲post,請求參數爲json格式,pos_param:method爲post,請求參數爲鍵值對,get:method爲get
setReqUrl(requestUrl:String) 設置請求Url
setParams(params: Parameters) 設置請求參數
setParam(key:String,param:Any)- 設置請求參數
setHttpHeaders(headers: HTTPHeaders)- 設置請求頭
setHttpHeader(key:String,header:String) 設置請求頭
2. 圖片上傳
let url="xxxxx"
let httpParams=HttpUploadRequestParams()
httpParams
            .setParam(key: "type", param: "addroadblock")//設置請求參數也可經過setParams()設置Array
            .setReqUrl(requestUrl: url) //設置請求連接
            .setFileSuffixName(fileSuffixName: ".jpg") //設置文件後綴名,後續上傳其它文件擴展也可以使用
            .setImages(images: [UIImage(named: "d")!,UIImage(named: "e")!])//設置上傳圖片列表
            .setMultiparName(multipartName: "imgList") //設置對應後臺服務器上傳文件字段
            .build()
        
  /**
  經過泛型設置結果轉換的been類,可返回上傳進度
 */
 YYHttpUploadUtils<UserInfo>.upload(httpRequestParams: httpParams, requestSuccessResult: {
            result in
        }, requestFailureResult: {
            error in
            print(error)
        }, requestProgress: {
            progress in
        })
複製代碼
  • HttpUploadRequestParams
屬性 做用
setMultiparName(multipartName:String) 後天接口提供的字段名
setImages(images: [UIImage]?) 設置上傳圖片
setFileSuffixName(fileSuffixName:String) 設置上傳圖片後綴名
setReqUrl(requestUrl:String) 設置請求url
setParams(params: Parameters) 設置請求參數
setParam(key:String,param:Any)- 設置請求參數
setHttpHeaders(headers: HTTPHeaders)- 設置請求頭
setHttpHeader(key:String,header:String) 設置請求頭
3.全局參數配置
屬性 做用
showHttpRequestLog 設置是否開啓請求日誌輸出
cacheTimeOutWithClear(expiry: YYHttpExpiry) 緩存過時時間
timeoutIntervalForRequest(_ timeInterval :TimeInterval) 請求超時

十3、YYDataShowView:數據加載顯示頁面

  • YYDataShowView基本用法
屬性 做用
init(defaultDataShowViewParams:DefaultDataShowViewParams,...) 默認初始化方法
init(custom:BaseDataShowContentView,visibileHeight:CGFloat?=UIScreen.main.bounds.height,aboveView:UIView?=nil)) 自定義展現內容初始化方法
show(parentView:UIViewController) 顯示DataShowView
hide() 隱藏DataShowView
  • DefaultDataShowViewParams基本用法
屬性 做用
setDefaultDataShowViewType(...) 設置顯示樣式:noData、noNetWork、loading
setDefaultNoDataShowImg(...) 設置沒有數據時顯示的圖片
setDefaultNoNetworkShowImg(...) 設置沒有網絡是顯示的圖片
setDefaultShowImgWidth(...) 設置顯示圖片的寬度
setDefaultShowImgHeight(...) 設置顯示圖片的高度
setDefaultShowNoDataText(...) 設置沒有數據時顯示的文本
setDefaultShowNoNetWorkText(...) 設置沒有網絡時顯示的文本
setDefaultShowTextSize(...) 設置顯示文本的字體大小
setDefaultShowTextColor(...) 設置顯示文本的顏色
setDefaultShowButtonText(...) 設置按鈕的文本
setDefaultShowButtonTextSize(...) 設置按鈕的字體大小
setDefaultShowButtonTextColor(...) 設置按鈕的文本顏色
setDefaultShowButtonBorderWidth(...) 設置按鈕的外邊框寬度
setDefaultShowButtonBorderColor(...) 設置按鈕外邊框顏色
setDefaultSHowButtonPadding(...) 設置按鈕的內邊距
setDefaultShowButtonCornerRadius(...) 設置按鈕的圓角
setHiddenShowButton(i...) 設置按鈕是否顯示
setDefaultShowButtonBackgroundColor(...) 設置按鈕背景顏色
setDefaultShowLoadingText(...) 設置加載文本
setDefaulutShowLoadingImgsTimeInterval(...) 設置加載Image的間隔時間
  • 沒有數據樣式

    let defaultDataShowViewParams=DefaultDataShowViewParams() defaultDataShowViewParams .setDefaultNoDataShowImg(defaultNoDataShowImg: "nodata") .build() dataShowView=YYDataShowView(defaultDataShowViewParams:defaultDataShowViewParams,aboveView: navigation.bar,reloadHandler: { YYDialog.createToast().show(view: self.view, text: "點擊從新加載按鈕") })

    dataShowView!.show(parentView: self)

  • 沒有網絡樣式

    let defaultDataShowViewParams=DefaultDataShowViewParams() defaultDataShowViewParams .setDefaultDataShowViewType(showViewType: .noNetWork) .setDefaultNoNetworkShowImg(defaultNoNetworkShowImg: "nonetwork") .build()

    dataShowView=YYDataShowView(defaultDataShowViewParams: defaultDataShowViewParams,aboveView: navigation.bar,reloadHandler: {
          YYDialog.createToast().show(view: self.view, text: "點擊從新加載按鈕")
      })
      
     dataShowView!.show(parentView: self)
    複製代碼
  • 加載數據樣式

    let imgs=["default_data_show_loading1","default_data_show_loading2","default_data_show_loading3","default_data_show_loading4","default_data_show_loading5","default_data_show_loading6","default_data_show_loading7","default_data_show_loading8","default_data_show_loading10","default_data_show_loading11","default_data_show_loading12"]

    let defaultDataShowViewParams=DefaultDataShowViewParams() defaultDataShowViewParams .setDefaultDataShowViewType(showViewType: .loading) .setDefaultLoadingImags(defaultLoadingImags: imgs) .build()

    dataShowView=YYDataShowView(defaultDataShowViewParams: defaultDataShowViewParams,aboveView: navigation.bar) dataShowView!.show(parentView: self)

  • 自定義樣式

1.實現BaseDataShowContentView,而後指定_contentHeight(高度)
2.加載自定義View
let customView=CustomDataShowView()
YYDataShowView.init(custom: customView,aboveView: navigation.bar).show(parentView: self)
複製代碼

十4、通用工具類

  • IPhoneUtils
屬性 做用
getNavBarHeight() 獲取NavigationBar高度
isIphoneX() 判斷是不是iphoneX以上
  • ColorUtils
屬性 做用
clickSelectBgChange(...) 設置View點擊時的背景變化
RGBColor(...) 獲取RGB顏色
colorWithHexString() 16進制顏色轉化成UIColor
  • InternationalUtils
屬性 做用
getString(...) 獲取本地Localizable對應的內容
initUserLanguage() 初始化語言
setLanguage(...) 設置當前語言
getCurrentLanguage() 獲取當前語言
  • UILabelUtils
屬性 做用
getLabHeigh(...) 獲取UILabel高度
  • PositionSettingUtils
屬性 做用
position(...) 設置View的位置和高度
  • Logger(日誌輸出)

  • UILabelPadding(可設置內邊距的UILabel)

屬性 做用
init(...) 初始化UILabel,設置內邊距
相關文章
相關標籤/搜索