├── .DS_Store
├── LICENSE
├── PreloadDemo
├── .DS_Store
├── Podfile
├── Podfile.lock
├── Pods
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcuserdata
│ │ │ ├── shenjie.xcuserdatad
│ │ │ └── xcschemes
│ │ │ │ ├── Alamofire.xcscheme
│ │ │ │ ├── Kingfisher.xcscheme
│ │ │ │ ├── Pods-PreloadDemo.xcscheme
│ │ │ │ └── xcschememanagement.plist
│ │ │ └── snaigame.xcuserdatad
│ │ │ └── xcschemes
│ │ │ ├── Pods-PreloadDemo.xcscheme
│ │ │ └── xcschememanagement.plist
│ └── Target Support Files
│ │ └── Pods-PreloadDemo
│ │ ├── Pods-PreloadDemo-Info.plist
│ │ ├── Pods-PreloadDemo-acknowledgements.markdown
│ │ ├── Pods-PreloadDemo-acknowledgements.plist
│ │ ├── Pods-PreloadDemo-dummy.m
│ │ ├── Pods-PreloadDemo-frameworks-Debug-input-files.xcfilelist
│ │ ├── Pods-PreloadDemo-frameworks-Debug-output-files.xcfilelist
│ │ ├── Pods-PreloadDemo-frameworks-Release-input-files.xcfilelist
│ │ ├── Pods-PreloadDemo-frameworks-Release-output-files.xcfilelist
│ │ ├── Pods-PreloadDemo-frameworks.sh
│ │ ├── Pods-PreloadDemo-umbrella.h
│ │ ├── Pods-PreloadDemo.debug.xcconfig
│ │ ├── Pods-PreloadDemo.modulemap
│ │ └── Pods-PreloadDemo.release.xcconfig
├── PreloadDemo.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ ├── shenjie.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ └── snaigame.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ └── PreloadDemo.xcscheme
│ └── xcuserdata
│ │ ├── shenjie.xcuserdatad
│ │ ├── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ │ └── snaigame.xcuserdatad
│ │ └── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
├── PreloadDemo.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ ├── shenjie.xcuserdatad
│ │ ├── UserInterfaceState.xcuserstate
│ │ └── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ │ └── snaigame.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
└── PreloadDemo
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── Model
│ └── ImageModel.swift
│ ├── NetWork
│ └── RobohashClient.swift
│ ├── SceneDelegate.swift
│ ├── View
│ └── ProloadTableViewCell.swift
│ ├── ViewController.swift
│ └── ViewModel
│ └── PreloadCellViewModel.swift
├── README.md
└── 参考
├── .DS_Store
├── MDTable-master
├── .gitignore
├── Documents
│ └── Chinese Document.md
├── LICENSE
├── Logo
│ └── Logo.png
├── MDTable.podspec
├── MDTable
│ ├── MDTable.xcodeproj
│ │ ├── project.pbxproj
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── MDTable.xcscheme
│ └── MDTable
│ │ ├── Info.plist
│ │ └── MDTable.h
├── MDTableExample.xcodeproj
│ └── project.pbxproj
├── MDTableExample
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Logo.png
│ │ │ └── Logo_120-1.png
│ │ ├── Contents.json
│ │ ├── LaunchScreen.imageset
│ │ │ ├── Contents.json
│ │ │ └── LaunchScreen.png
│ │ ├── avatar.imageset
│ │ │ ├── Contents.json
│ │ │ └── avatar@2x.png
│ │ ├── channel_1.imageset
│ │ │ ├── Contents.json
│ │ │ └── channel_1.jpeg
│ │ ├── channel_2.imageset
│ │ │ ├── Contents.json
│ │ │ └── channel_2.jpeg
│ │ ├── channel_3.imageset
│ │ │ ├── Contents.json
│ │ │ └── channel_3.jpeg
│ │ ├── channel_4.imageset
│ │ │ ├── Contents.json
│ │ │ └── channel_4.jpeg
│ │ ├── channel_5.imageset
│ │ │ ├── Contents.json
│ │ │ └── channel_5.jpeg
│ │ ├── channel_6.imageset
│ │ │ ├── Contents.json
│ │ │ └── channel_6.jpeg
│ │ ├── cm2_daily_banner1.imageset
│ │ │ ├── Contents.json
│ │ │ └── cm2_daily_banner1@2x.jpg
│ │ ├── cm2_daily_banner2.imageset
│ │ │ ├── Contents.json
│ │ │ └── cm2_daily_banner2@2x.jpg
│ │ ├── cm2_daily_banner3.imageset
│ │ │ ├── Contents.json
│ │ │ └── cm2_daily_banner3@2x.jpg
│ │ ├── cm2_daily_banner4.imageset
│ │ │ ├── Contents.json
│ │ │ └── cm2_daily_banner4@2x.jpg
│ │ ├── cm2_daily_banner5.imageset
│ │ │ ├── Contents.json
│ │ │ └── cm2_daily_banner5@2x.jpg
│ │ ├── cm2_daily_banner6.imageset
│ │ │ ├── Contents.json
│ │ │ └── cm2_daily_banner6@2x.jpg
│ │ ├── cm2_icn_light.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm2_icn_light.png
│ │ │ ├── cm2_icn_light@2x.png
│ │ │ └── cm2_icn_light@3x.png
│ │ ├── cm2_list_morecmt_icn_arr.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm2_list_morecmt_icn_arr.png
│ │ │ ├── cm2_list_morecmt_icn_arr@2x.png
│ │ │ └── cm2_list_morecmt_icn_arr@3x.png
│ │ ├── cm4_cover_btm_mask.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_cover_btm_mask.png
│ │ │ ├── cm4_cover_btm_mask@2x.png
│ │ │ └── cm4_cover_btm_mask@3x.png
│ │ ├── cm4_cover_digital_disc.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_cover_digital_disc.png
│ │ │ ├── cm4_cover_digital_disc@2x.png
│ │ │ └── cm4_cover_digital_disc@3x.png
│ │ ├── cm4_cover_icn_music.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_cover_icn_music.png
│ │ │ ├── cm4_cover_icn_music@2x.png
│ │ │ └── cm4_cover_icn_music@3x.png
│ │ ├── cm4_cover_icn_video.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_cover_icn_video.png
│ │ │ ├── cm4_cover_icn_video@2x.png
│ │ │ └── cm4_cover_icn_video@3x.png
│ │ ├── cm4_cover_top_mask-1.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_cover_icn_video.png
│ │ │ ├── cm4_cover_icn_video@2x.png
│ │ │ └── cm4_cover_icn_video@3x.png
│ │ ├── cm4_cover_top_mask.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_cover_top_mask.png
│ │ │ ├── cm4_cover_top_mask@2x.png
│ │ │ └── cm4_cover_top_mask@3x.png
│ │ ├── cm4_disc_cover_new.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_cover_new.png
│ │ │ ├── cm4_disc_cover_new@2x.png
│ │ │ └── cm4_disc_cover_new@3x.png
│ │ ├── cm4_disc_topbtn.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn@2x.png
│ │ │ └── cm4_disc_topbtn@3x.png
│ │ ├── cm4_disc_topbtn_daily.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn_daily.png
│ │ │ ├── cm4_disc_topbtn_daily@2x.png
│ │ │ └── cm4_disc_topbtn_daily@3x.png
│ │ ├── cm4_disc_topbtn_daily_prs.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn_daily_prs.png
│ │ │ ├── cm4_disc_topbtn_daily_prs@2x.png
│ │ │ └── cm4_disc_topbtn_daily_prs@3x.png
│ │ ├── cm4_disc_topbtn_fm.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn_fm@2x.png
│ │ │ └── cm4_disc_topbtn_fm@3x.png
│ │ ├── cm4_disc_topbtn_fm_prs.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn_fm_prs.png
│ │ │ ├── cm4_disc_topbtn_fm_prs@2x.png
│ │ │ └── cm4_disc_topbtn_fm_prs@3x.png
│ │ ├── cm4_disc_topbtn_rank.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn_rank@2x.png
│ │ │ └── cm4_disc_topbtn_rank@3x.png
│ │ ├── cm4_disc_topbtn_rank_prs.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_topbtn_rank_prs.png
│ │ │ ├── cm4_disc_topbtn_rank_prs@2x.png
│ │ │ └── cm4_disc_topbtn_rank_prs@3x.png
│ │ ├── cm4_disc_type_video.imageset
│ │ │ ├── Contents.json
│ │ │ ├── cm4_disc_type_video.png
│ │ │ ├── cm4_disc_type_video@2x.png
│ │ │ └── cm4_disc_type_video@3x.png
│ │ ├── columnistl_1.imageset
│ │ │ ├── Contents.json
│ │ │ └── columnistl_1.jpeg
│ │ ├── columnistl_2.imageset
│ │ │ ├── Contents.json
│ │ │ └── columnistl_2.jpeg
│ │ ├── columnistl_3.imageset
│ │ │ ├── Columnistl_3.jpeg
│ │ │ └── Contents.json
│ │ ├── exclusive_1.imageset
│ │ │ ├── Contents.json
│ │ │ └── exclusive_1.jpeg
│ │ ├── exclusive_2.imageset
│ │ │ ├── Contents.json
│ │ │ └── exclusive_2.jpeg
│ │ ├── exclusive_3.imageset
│ │ │ ├── Contents.json
│ │ │ └── exclusive_3.jpeg
│ │ ├── music_1.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_1.png
│ │ ├── music_2.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_2.jpeg
│ │ ├── music_3.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_3.jpeg
│ │ ├── music_4.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_4.jpeg
│ │ ├── music_5.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_5.jpeg
│ │ ├── music_6.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_6.jpeg
│ │ ├── music_sheet_1.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_sheet_1.jpeg
│ │ ├── music_sheet_2.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_sheet_2.jpeg
│ │ ├── music_sheet_3.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_sheet_3.jpeg
│ │ ├── music_sheet_4.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_sheet_4.jpeg
│ │ ├── music_sheet_5.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_sheet_5.jpeg
│ │ ├── music_sheet_6.imageset
│ │ │ ├── Contents.json
│ │ │ └── music_sheet_6.jpeg
│ │ ├── mv_1.imageset
│ │ │ ├── Contents.json
│ │ │ └── mv_1.jpeg
│ │ ├── mv_2.imageset
│ │ │ ├── Contents.json
│ │ │ └── mv_2.jpeg
│ │ ├── mv_3.imageset
│ │ │ ├── Contents.json
│ │ │ └── mv_3.jpeg
│ │ └── mv_4.imageset
│ │ │ ├── Contents.json
│ │ │ └── mv_4.jpeg
│ ├── AvatarItemView.swift
│ ├── Banner.swift
│ ├── BaseNavigationController.swift
│ ├── Channel.swift
│ ├── ChannelItemView.swift
│ ├── ColumnTitle.swift
│ ├── Columnist.swift
│ ├── ColumnistItemCell.swift
│ ├── CusomCellWithXib.swift
│ ├── CusomCellWithXib.xib
│ ├── CustomCellWithXibController.swift
│ ├── DynamicHeightCell.swift
│ ├── DynamicHeightCellController.swift
│ ├── DynamicHeightRow.swift
│ ├── EditableTableViewController.swift
│ ├── Exclusive.swift
│ ├── ExclusiveItemView.swift
│ ├── Extension.swift
│ ├── FPS.swift
│ ├── Footer.swift
│ ├── Info.plist
│ ├── LaunchScreen.storyboard
│ ├── MV.swift
│ ├── MVItemView.swift
│ ├── Main.storyboard
│ ├── MainTableViewController.swift
│ ├── Menu.swift
│ ├── MenuItemView.swift
│ ├── MenuTableViewController.swift
│ ├── Music.swift
│ ├── MusicItemView.swift
│ ├── NMColumnTitleCell.xib
│ ├── NeteaseCloudMusicController.swift
│ ├── NeteaseCloudMusicSortController.swift
│ ├── ParallexBanner.swift
│ ├── PlaceHolder.jpeg
│ ├── Recommend.swift
│ ├── RecommendItemView.swift
│ ├── ReorderTableViewController.swift
│ ├── SectionIndexTitleController.swift
│ ├── SortableSection.swift
│ ├── SystemCellController.swift
│ └── XibRow.swift
├── README.md
├── Screenshot
│ └── MainList.png
└── Source
│ ├── Cell.swift
│ ├── Delegate.swift
│ ├── Dispatch.swift
│ ├── Edit.swift
│ ├── Focus.swift
│ ├── Manager.swift
│ ├── Menu.swift
│ ├── Preload.swift
│ ├── ReactiveRow.swift
│ ├── Row.swift
│ ├── RowConvertable.swift
│ ├── Section.swift
│ ├── SectionConvertable.swift
│ ├── Table.swift
│ └── Util.swift
├── ModeratorsExplorer-master
├── .DS_Store
├── ModeratorsExplorer.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcuserdata
│ │ │ ├── critz.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ ├── ernesto.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ ├── lboaro.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ ├── macmini.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ ├── pierre.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ ├── shenjie.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ │ └── xwu.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ ├── xcshareddata
│ │ ├── IDETemplateMacros.plist
│ │ └── xcschemes
│ │ │ └── ModeratorsExplorer.xcscheme
│ └── xcuserdata
│ │ ├── shenjie.xcuserdatad
│ │ ├── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ │ └── xwu.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
├── ModeratorsExplorer
│ ├── .DS_Store
│ ├── AlertDisplayer.swift
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── .DS_Store
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon1024.png
│ │ │ ├── Icon20.png
│ │ │ ├── Icon20@2x.png
│ │ │ ├── Icon29.png
│ │ │ ├── Icon29@2x.png
│ │ │ ├── Icon40.png
│ │ │ ├── Icon40@2x.png
│ │ │ ├── Icon76.png
│ │ │ ├── Icon76@2x.png
│ │ │ ├── Icon83.5@2x.png
│ │ │ ├── icon-app-20@2x.png
│ │ │ ├── icon-app-20@3x.png
│ │ │ ├── icon-app-29@2x.png
│ │ │ ├── icon-app-29@3x copy.png
│ │ │ ├── icon-app-40@2x.png
│ │ │ ├── icon-app-40@3x.png
│ │ │ ├── icon-app-60@2x.png
│ │ │ └── icon-app-60@3x.png
│ │ ├── Contents.json
│ │ ├── rw-logo.imageset
│ │ │ ├── Contents.json
│ │ │ └── Razewarelogo_1024.png
│ │ ├── rwdevcon-bg.imageset
│ │ │ ├── Contents.json
│ │ │ └── rwdevcon-bg.png
│ │ └── se-icon.imageset
│ │ │ ├── Contents.json
│ │ │ └── se-icon.png
│ ├── Base.lproj
│ │ └── Main.storyboard
│ ├── ButtonEnablingBehavior.swift
│ ├── ColorPalette.swift
│ ├── Controllers
│ │ ├── .DS_Store
│ │ ├── ModeratorsListViewController.swift
│ │ └── ModeratorsSearchViewController.swift
│ ├── Double+Extensions.swift
│ ├── HTTPURLResponse.swift
│ ├── Info.plist
│ ├── LaunchScreen.storyboard
│ ├── Models
│ │ ├── .DS_Store
│ │ └── Moderator.swift
│ ├── Services
│ │ ├── .DS_Store
│ │ ├── Networking
│ │ │ ├── .DS_Store
│ │ │ ├── DataResponseError.swift
│ │ │ ├── ModeratorRequest.swift
│ │ │ ├── PagedModeratorResponse.swift
│ │ │ └── URLRequest.swift
│ │ ├── Result.swift
│ │ └── StackExchangeClient.swift
│ ├── String+Extensions.swift
│ ├── UITextField+Extensions.swift
│ ├── ViewModels
│ │ ├── .DS_Store
│ │ └── ModeratorsViewModel.swift
│ └── Views
│ │ ├── .DS_Store
│ │ └── ModeratorTableViewCell.swift
└── README.md
├── NukeDemo-main
├── .gitignore
├── NukeDemo.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── swiftpm
│ │ │ └── Package.resolved
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── NukeDemo.xcscheme
├── README.md
├── Resources
│ ├── IB
│ │ └── Base.lproj
│ │ │ ├── LaunchScreen.xib
│ │ │ └── Main.storyboard
│ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── 100.png
│ │ │ ├── 1024.png
│ │ │ ├── 114.png
│ │ │ ├── 120.png
│ │ │ ├── 144.png
│ │ │ ├── 152.png
│ │ │ ├── 167.png
│ │ │ ├── 180.png
│ │ │ ├── 20.png
│ │ │ ├── 29.png
│ │ │ ├── 40.png
│ │ │ ├── 50.png
│ │ │ ├── 57.png
│ │ │ ├── 58.png
│ │ │ ├── 60.png
│ │ │ ├── 72.png
│ │ │ ├── 76.png
│ │ │ ├── 80.png
│ │ │ ├── 87.png
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Info.plist
│ ├── baseline.jpeg
│ └── progressive.jpeg
└── Sources
│ ├── AlamofireIntegrationDemoViewController.swift
│ ├── AnimatedImageUsingVideoViewController.swift
│ ├── AnimatedImageViewController.swift
│ ├── AppDelegate.swift
│ ├── BasicDemoViewController.swift
│ ├── DataCachingDemoViewController.swift
│ ├── Helpers
│ ├── Images.swift
│ └── Utilities.swift
│ ├── ImagePipelineSettingsViewController.storyboard
│ ├── ImagePipelineSettingsViewController.swift
│ ├── ImageProcessingDemoViewController.swift
│ ├── MenuViewController.swift
│ ├── PrefetchSwiftUIDemo.swift
│ ├── PrefetchingDemoViewController.swift
│ ├── ProgressiveDecodingDemoViewController.swift
│ ├── RateLimiterDemoViewController.swift
│ └── SwiftSVGDemoViewController.swift
├── TableViewPrefetch-master
├── .gitignore
├── README.md
├── TableViewPrefetch.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── TableViewPrefetch
│ ├── Controllers
│ └── ImageViewController.swift
│ ├── Models
│ ├── ImageDataStore.swift
│ └── ImageModel.swift
│ ├── Other Gubbins
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj
│ │ └── LaunchScreen.storyboard
│ └── Info.plist
│ └── Views
│ ├── Base.lproj
│ └── Main.storyboard
│ └── ImageTableViewCell.swift
└── prefetch-master
├── Prefetch.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ ├── shenjie.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
│ │ └── soul.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
└── xcuserdata
│ ├── shenjie.xcuserdatad
│ └── xcschemes
│ │ └── xcschememanagement.plist
│ └── soul.xcuserdatad
│ └── xcschemes
│ └── xcschememanagement.plist
├── Prefetch
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Contents.json
│ └── row.imageset
│ │ ├── Contents.json
│ │ ├── font-awesome_4-7-0_align-justify_16_0_007dff_none.png
│ │ ├── font-awesome_4-7-0_align-justify_32_0_007dff_none.png
│ │ └── font-awesome_4-7-0_align-justify_48_0_007dff_none.png
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── Controller
│ ├── BatchViewController.swift
│ ├── PrefetchViewController.swift
│ └── ViewController.swift
├── Info.plist
├── Model
│ ├── Coin.swift
│ ├── News.swift
│ └── Post.swift
└── View
│ ├── CoinTableViewCell.swift
│ ├── CoinTableViewCell.xib
│ ├── LoadingTableViewCell.swift
│ ├── LoadingTableViewCell.xib
│ ├── NewsTableViewCell.swift
│ ├── NewsTableViewCell.xib
│ ├── PostTableViewCell.swift
│ └── PostTableViewCell.xib
├── README.md
└── screenshot.png
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/.DS_Store
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Shenjie
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/PreloadDemo/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/PreloadDemo/.DS_Store
--------------------------------------------------------------------------------
/PreloadDemo/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '10.0'
2 | use_frameworks!
3 |
4 | target 'PreloadDemo' do
5 | pod 'Alamofire', '~> 5.2'
6 | pod 'Kingfisher', '~> 6.0'
7 | end
--------------------------------------------------------------------------------
/PreloadDemo/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODFILE CHECKSUM: 0c74f426bb4d16a56452c71bc4350bfb58c2fc04
2 |
3 | COCOAPODS: 1.9.1
4 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODFILE CHECKSUM: 0c74f426bb4d16a56452c71bc4350bfb58c2fc04
2 |
3 | COCOAPODS: 1.9.1
4 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Pods.xcodeproj/xcuserdata/shenjie.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Alamofire.xcscheme
8 |
9 | isShown
10 |
11 |
12 | Kingfisher.xcscheme
13 |
14 | isShown
15 |
16 |
17 | Pods-PreloadDemo.xcscheme
18 |
19 | isShown
20 |
21 |
22 |
23 | SuppressBuildableAutocreation
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Pods.xcodeproj/xcuserdata/snaigame.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Pods-PreloadDemo.xcscheme
8 |
9 | isShown
10 |
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_PreloadDemo : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_PreloadDemo
5 | @end
6 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-frameworks-Debug-input-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${PODS_ROOT}/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-frameworks.sh
2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
3 | ${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-frameworks-Debug-output-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-frameworks-Release-input-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${PODS_ROOT}/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-frameworks.sh
2 | ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework
3 | ${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-frameworks-Release-output-files.xcfilelist:
--------------------------------------------------------------------------------
1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework
2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_PreloadDemoVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_PreloadDemoVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo.debug.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | PODS_BUILD_DIR = ${BUILD_DIR}
3 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
4 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
5 | PODS_ROOT = ${SRCROOT}/Pods
6 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
7 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_PreloadDemo {
2 | umbrella header "Pods-PreloadDemo-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/PreloadDemo/Pods/Target Support Files/Pods-PreloadDemo/Pods-PreloadDemo.release.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | PODS_BUILD_DIR = ${BUILD_DIR}
3 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
4 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
5 | PODS_ROOT = ${SRCROOT}/Pods
6 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
7 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/project.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/PreloadDemo/PreloadDemo.xcodeproj/project.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/project.xcworkspace/xcuserdata/snaigame.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/PreloadDemo/PreloadDemo.xcodeproj/project.xcworkspace/xcuserdata/snaigame.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/xcuserdata/shenjie.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/xcuserdata/shenjie.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | PreloadDemo.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | E5D9E1242609BC010054280A
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcodeproj/xcuserdata/snaigame.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/PreloadDemo/PreloadDemo.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcworkspace/xcuserdata/shenjie.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo.xcworkspace/xcuserdata/snaigame.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/PreloadDemo/PreloadDemo.xcworkspace/xcuserdata/snaigame.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // PreloadDemo
4 | //
5 | // Created by shenjie on 2021/3/23.
6 | //
7 |
8 | import UIKit
9 |
10 | @main
11 | class AppDelegate: UIResponder, UIApplicationDelegate {
12 |
13 |
14 |
15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
16 | // Override point for customization after application launch.
17 | return true
18 | }
19 |
20 | // MARK: UISceneSession Lifecycle
21 |
22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
23 | // Called when a new scene session is being created.
24 | // Use this method to select a configuration to create the new scene with.
25 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
26 | }
27 |
28 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
29 | // Called when the user discards a scene session.
30 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
31 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
32 | }
33 |
34 |
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/PreloadDemo/PreloadDemo/Model/ImageModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageModel.swift
3 | // PreloadDemo
4 | //
5 | // Created by shenjie on 2021/4/2.
6 | //
7 |
8 | import Foundation
9 |
10 | struct ImageModel {
11 | var url: URL?
12 | var order: Int?
13 |
14 | init(url: String, order: Int) {
15 | self.url = URL(string: url)
16 | self.order = order
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ProloadDemo
2 |
3 | 该 Demo 记录了一些优雅处理网络数据的方式:
4 | 1. 实现列表无限滚动时,数据如何预加载,从而达到无缝加载的效果;
5 | 2. 滚动时 UI 卡顿的解决方案该如何实现;
6 | 3. 如何优化网络,利用数据缓存来节约流量和系统的内存;
7 |
--------------------------------------------------------------------------------
/参考/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/.DS_Store
--------------------------------------------------------------------------------
/参考/MDTable-master/.gitignore:
--------------------------------------------------------------------------------
1 | # For Xcode
2 | .DS_Store
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | *.xcworkspace
13 | !default.xcworkspace
14 | xcuserdata
15 | profile
16 | *.moved-aside
17 | DerivedData
18 | .idea/
19 |
--------------------------------------------------------------------------------
/参考/MDTable-master/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2017 Leo
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Logo/Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/Logo/Logo.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTable.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'MDTable'
3 | s.version = '0.3.0'
4 | s.summary = 'Elegant way to write tableView in Swift'
5 | s.description = <<-DESC
6 | A simple but power wrapper of UITableView to create model-driven TableView.
7 | DESC
8 |
9 | s.homepage = 'https://github.com/LeoMobileDeveloper/MDTable'
10 | s.license = { :type => 'MIT', :file => 'LICENSE' }
11 | s.author = { 'Leo' => 'leomobiledeveloper@gmail.com' }
12 | s.source = { :git => 'https://github.com/LeoMobileDeveloper/MDTable.git', :tag => s.version.to_s }
13 | s.ios.deployment_target = '8.0'
14 | s.source_files = 'Source/**/*'
15 | end
16 |
17 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTable/MDTable/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTable/MDTable/MDTable.h:
--------------------------------------------------------------------------------
1 | //
2 | // MDTable.h
3 | // MDTable
4 | //
5 | // Created by Leo on 2017/6/15.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for MDTable.
12 | FOUNDATION_EXPORT double MDTableVersionNumber;
13 |
14 | //! Project version string for MDTable.
15 | FOUNDATION_EXPORT const unsigned char MDTableVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "60x60",
35 | "idiom" : "iphone",
36 | "filename" : "Logo_120-1.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "Logo.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "idiom" : "ipad",
47 | "size" : "20x20",
48 | "scale" : "1x"
49 | },
50 | {
51 | "idiom" : "ipad",
52 | "size" : "20x20",
53 | "scale" : "2x"
54 | },
55 | {
56 | "idiom" : "ipad",
57 | "size" : "29x29",
58 | "scale" : "1x"
59 | },
60 | {
61 | "idiom" : "ipad",
62 | "size" : "29x29",
63 | "scale" : "2x"
64 | },
65 | {
66 | "idiom" : "ipad",
67 | "size" : "40x40",
68 | "scale" : "1x"
69 | },
70 | {
71 | "idiom" : "ipad",
72 | "size" : "40x40",
73 | "scale" : "2x"
74 | },
75 | {
76 | "idiom" : "ipad",
77 | "size" : "76x76",
78 | "scale" : "1x"
79 | },
80 | {
81 | "idiom" : "ipad",
82 | "size" : "76x76",
83 | "scale" : "2x"
84 | },
85 | {
86 | "idiom" : "ipad",
87 | "size" : "83.5x83.5",
88 | "scale" : "2x"
89 | }
90 | ],
91 | "info" : {
92 | "version" : 1,
93 | "author" : "xcode"
94 | }
95 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/AppIcon.appiconset/Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/AppIcon.appiconset/Logo.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/AppIcon.appiconset/Logo_120-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/AppIcon.appiconset/Logo_120-1.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/LaunchScreen.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchScreen.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/LaunchScreen.imageset/LaunchScreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/LaunchScreen.imageset/LaunchScreen.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "avatar@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/avatar.imageset/avatar@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/avatar.imageset/avatar@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "channel_1.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_1.imageset/channel_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_1.imageset/channel_1.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "channel_2.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_2.imageset/channel_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_2.imageset/channel_2.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "channel_3.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_3.imageset/channel_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_3.imageset/channel_3.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "channel_4.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_4.imageset/channel_4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_4.imageset/channel_4.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "channel_5.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_5.imageset/channel_5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_5.imageset/channel_5.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "channel_6.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_6.imageset/channel_6.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/channel_6.imageset/channel_6.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm2_daily_banner1@2x.jpg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner1.imageset/cm2_daily_banner1@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner1.imageset/cm2_daily_banner1@2x.jpg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm2_daily_banner2@2x.jpg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner2.imageset/cm2_daily_banner2@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner2.imageset/cm2_daily_banner2@2x.jpg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm2_daily_banner3@2x.jpg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner3.imageset/cm2_daily_banner3@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner3.imageset/cm2_daily_banner3@2x.jpg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm2_daily_banner4@2x.jpg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner4.imageset/cm2_daily_banner4@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner4.imageset/cm2_daily_banner4@2x.jpg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm2_daily_banner5@2x.jpg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner5.imageset/cm2_daily_banner5@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner5.imageset/cm2_daily_banner5@2x.jpg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm2_daily_banner6@2x.jpg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner6.imageset/cm2_daily_banner6@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_daily_banner6.imageset/cm2_daily_banner6@2x.jpg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm2_icn_light.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm2_icn_light@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm2_icn_light@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/cm2_icn_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/cm2_icn_light.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/cm2_icn_light@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/cm2_icn_light@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/cm2_icn_light@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_icn_light.imageset/cm2_icn_light@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm2_list_morecmt_icn_arr.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm2_list_morecmt_icn_arr@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm2_list_morecmt_icn_arr@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/cm2_list_morecmt_icn_arr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/cm2_list_morecmt_icn_arr.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/cm2_list_morecmt_icn_arr@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/cm2_list_morecmt_icn_arr@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/cm2_list_morecmt_icn_arr@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm2_list_morecmt_icn_arr.imageset/cm2_list_morecmt_icn_arr@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_cover_btm_mask.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_cover_btm_mask@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_cover_btm_mask@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/cm4_cover_btm_mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/cm4_cover_btm_mask.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/cm4_cover_btm_mask@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/cm4_cover_btm_mask@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/cm4_cover_btm_mask@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_btm_mask.imageset/cm4_cover_btm_mask@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_cover_digital_disc.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_cover_digital_disc@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_cover_digital_disc@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/cm4_cover_digital_disc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/cm4_cover_digital_disc.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/cm4_cover_digital_disc@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/cm4_cover_digital_disc@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/cm4_cover_digital_disc@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_digital_disc.imageset/cm4_cover_digital_disc@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_cover_icn_music.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_cover_icn_music@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_cover_icn_music@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/cm4_cover_icn_music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/cm4_cover_icn_music.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/cm4_cover_icn_music@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/cm4_cover_icn_music@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/cm4_cover_icn_music@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_music.imageset/cm4_cover_icn_music@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_cover_icn_video.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_cover_icn_video@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_cover_icn_video@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/cm4_cover_icn_video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/cm4_cover_icn_video.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/cm4_cover_icn_video@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/cm4_cover_icn_video@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/cm4_cover_icn_video@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_icn_video.imageset/cm4_cover_icn_video@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_cover_icn_video.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_cover_icn_video@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_cover_icn_video@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/cm4_cover_icn_video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/cm4_cover_icn_video.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/cm4_cover_icn_video@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/cm4_cover_icn_video@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/cm4_cover_icn_video@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask-1.imageset/cm4_cover_icn_video@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_cover_top_mask.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_cover_top_mask@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_cover_top_mask@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/cm4_cover_top_mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/cm4_cover_top_mask.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/cm4_cover_top_mask@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/cm4_cover_top_mask@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/cm4_cover_top_mask@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_cover_top_mask.imageset/cm4_cover_top_mask@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_disc_cover_new.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_disc_cover_new@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_disc_cover_new@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/cm4_disc_cover_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/cm4_disc_cover_new.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/cm4_disc_cover_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/cm4_disc_cover_new@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/cm4_disc_cover_new@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_cover_new.imageset/cm4_disc_cover_new@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm4_disc_topbtn@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "cm4_disc_topbtn@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn.imageset/cm4_disc_topbtn@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn.imageset/cm4_disc_topbtn@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn.imageset/cm4_disc_topbtn@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn.imageset/cm4_disc_topbtn@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_disc_topbtn_daily.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_disc_topbtn_daily@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_disc_topbtn_daily@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/cm4_disc_topbtn_daily.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/cm4_disc_topbtn_daily.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/cm4_disc_topbtn_daily@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/cm4_disc_topbtn_daily@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/cm4_disc_topbtn_daily@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily.imageset/cm4_disc_topbtn_daily@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_disc_topbtn_daily_prs.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_disc_topbtn_daily_prs@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_disc_topbtn_daily_prs@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/cm4_disc_topbtn_daily_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/cm4_disc_topbtn_daily_prs.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/cm4_disc_topbtn_daily_prs@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/cm4_disc_topbtn_daily_prs@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/cm4_disc_topbtn_daily_prs@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_daily_prs.imageset/cm4_disc_topbtn_daily_prs@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm4_disc_topbtn_fm@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "cm4_disc_topbtn_fm@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm.imageset/cm4_disc_topbtn_fm@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm.imageset/cm4_disc_topbtn_fm@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm.imageset/cm4_disc_topbtn_fm@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm.imageset/cm4_disc_topbtn_fm@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_disc_topbtn_fm_prs.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_disc_topbtn_fm_prs@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_disc_topbtn_fm_prs@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/cm4_disc_topbtn_fm_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/cm4_disc_topbtn_fm_prs.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/cm4_disc_topbtn_fm_prs@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/cm4_disc_topbtn_fm_prs@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/cm4_disc_topbtn_fm_prs@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_fm_prs.imageset/cm4_disc_topbtn_fm_prs@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "cm4_disc_topbtn_rank@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "cm4_disc_topbtn_rank@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank.imageset/cm4_disc_topbtn_rank@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank.imageset/cm4_disc_topbtn_rank@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank.imageset/cm4_disc_topbtn_rank@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank.imageset/cm4_disc_topbtn_rank@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_disc_topbtn_rank_prs.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_disc_topbtn_rank_prs@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_disc_topbtn_rank_prs@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/cm4_disc_topbtn_rank_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/cm4_disc_topbtn_rank_prs.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/cm4_disc_topbtn_rank_prs@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/cm4_disc_topbtn_rank_prs@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/cm4_disc_topbtn_rank_prs@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_topbtn_rank_prs.imageset/cm4_disc_topbtn_rank_prs@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "cm4_disc_type_video.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "cm4_disc_type_video@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "cm4_disc_type_video@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/cm4_disc_type_video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/cm4_disc_type_video.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/cm4_disc_type_video@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/cm4_disc_type_video@2x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/cm4_disc_type_video@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/cm4_disc_type_video.imageset/cm4_disc_type_video@3x.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "columnistl_1.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_1.imageset/columnistl_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_1.imageset/columnistl_1.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "columnistl_2.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_2.imageset/columnistl_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_2.imageset/columnistl_2.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_3.imageset/Columnistl_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_3.imageset/Columnistl_3.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/columnistl_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Columnistl_3.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "exclusive_1.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_1.imageset/exclusive_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_1.imageset/exclusive_1.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "exclusive_2.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_2.imageset/exclusive_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_2.imageset/exclusive_2.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "exclusive_3.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_3.imageset/exclusive_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/exclusive_3.imageset/exclusive_3.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "music_1.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_1.imageset/music_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_1.imageset/music_1.png
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "music_2.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_2.imageset/music_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_2.imageset/music_2.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "music_3.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_3.imageset/music_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_3.imageset/music_3.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "music_4.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_4.imageset/music_4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_4.imageset/music_4.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "music_5.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_5.imageset/music_5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_5.imageset/music_5.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "music_6.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_6.imageset/music_6.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_6.imageset/music_6.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "music_sheet_1.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_1.imageset/music_sheet_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_1.imageset/music_sheet_1.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "music_sheet_2.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_2.imageset/music_sheet_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_2.imageset/music_sheet_2.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "music_sheet_3.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_3.imageset/music_sheet_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_3.imageset/music_sheet_3.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "music_sheet_4.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_4.imageset/music_sheet_4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_4.imageset/music_sheet_4.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "music_sheet_5.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_5.imageset/music_sheet_5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_5.imageset/music_sheet_5.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "music_sheet_6.jpeg",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_6.imageset/music_sheet_6.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/music_sheet_6.imageset/music_sheet_6.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mv_1.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_1.imageset/mv_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_1.imageset/mv_1.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mv_2.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_2.imageset/mv_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_2.imageset/mv_2.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mv_3.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_3.imageset/mv_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_3.imageset/mv_3.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mv_4.jpeg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_4.imageset/mv_4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/Assets.xcassets/mv_4.imageset/mv_4.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/BaseNavigationController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseNavigationController.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/13.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class BaseNavigationController: UINavigationController{
13 | override var preferredStatusBarStyle: UIStatusBarStyle{
14 | get{
15 | return .lightContent
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/ChannelItemView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionViewCell.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/10.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ChannelItemView:AvatarItemView{
12 |
13 | var coverImageview: UIImageView!
14 | var podcasterNameLabel: UILabel!
15 | var describeLabel: UILabel!
16 | func config(_ channel:NMChannel){
17 | podcasterNameLabel.text = channel.podcasterName
18 | avatarImageView.asyncSetImage(channel.avatar)
19 | describeLabel.text = channel.describe
20 |
21 | }
22 | override init(frame: CGRect) {
23 | super.init(frame: frame)
24 | commonInit()
25 | }
26 | func commonInit(){
27 | coverImageview = UIImageView().added(to: self)
28 | describeLabel = UILabel.title().added(to: self)
29 | describeLabel.numberOfLines = 2
30 | podcasterNameLabel = UILabel.title().added(to: self)
31 | podcasterNameLabel.textColor = UIColor.white
32 | }
33 | override func layoutSubviews() {
34 | super.layoutSubviews()
35 | avatarImageView.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.width)
36 | coverImageview.frame = avatarImageView.frame
37 | describeLabel.frame = CGRect(x: 4.0, y: avatarImageView.maxY + 4.0, width: self.frame.width - 8.0, height: 30.0)
38 | podcasterNameLabel.sizeToFit()
39 | podcasterNameLabel.frame = CGRect(x: 4.0, y: coverImageview.maxY - 2.0 - podcasterNameLabel.frame.height, width: describeLabel.frame.width, height: podcasterNameLabel.frame.height)
40 | }
41 | required init?(coder aDecoder: NSCoder) {
42 | fatalError("init(coder:) has not been implemented")
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/ColumnTitle.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NMHomeColumnCell.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/6.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MDTable
11 |
12 | class NMColumnTitleRow: ReactiveRow{
13 | let columnTitle:String
14 | init(title:String) {
15 | columnTitle = title
16 | super.init()
17 | self.rowHeight = 45.0
18 | self.initalType = .xib(xibName: "NMColumnTitleCell")
19 | }
20 | }
21 |
22 | class NMColumnTitleCell: MDTableViewCell{
23 |
24 | @IBOutlet weak var columnTitleLabel: UILabel!
25 | override func render(with row: RowConvertable) {
26 | guard let _row = row as? NMColumnTitleRow else {
27 | return
28 | }
29 | self.columnTitleLabel.text = _row.columnTitle
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/CusomCellWithXib.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CusomCellWithXib.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/15.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MDTable
11 |
12 | class CusomCellWithXib: MDTableViewCell{
13 |
14 | @IBOutlet weak var customSubTitleLabel: UILabel!
15 | @IBOutlet weak var customTitleLabel: UILabel!
16 | @IBOutlet weak var avaterImageView: UIImageView!
17 |
18 | override func render(with row: RowConvertable) {
19 | guard let row = row as? XibRow else{
20 | return;
21 | }
22 | customTitleLabel.text = row.title
23 | customSubTitleLabel.text = row.subTitle
24 | avaterImageView.image = row.image
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/CustomCellWithXibController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CustomCellWithXibController.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/15.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MDTable
11 |
12 | class CustomCellWithXibController: UITableViewController {
13 | var tableManager:TableManager!
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 | navigationItem.title = "Custom cell with XIB"
17 | let rows = (1..<100).map { (index) -> XibRow in
18 | let row = XibRow(title: "Title\(index)", subTitle: "Subtitle \(index)", image: UIImage(named: "avatar"))
19 | row.onDidSelected({ (tableView, indexPath) in
20 | tableView.manager?.delete(row: indexPath)
21 | tableView.deleteRows(at: [indexPath], with: .automatic)
22 | })
23 | return row
24 | }
25 | let section = Section(rows: rows)
26 | section.heightForHeader = 30.0
27 | section.titleForHeader = "Tap Row to Delete"
28 | tableView.manager = TableManager(sections: [section])
29 | }
30 | }
31 |
32 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/DynamicHeightCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DynamicHeightCell.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/16.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MDTable
11 |
12 | struct DynamicHeightCellConst{
13 | static let font = UIFont.systemFont(ofSize: 16)
14 | static let cellWidth = UIScreen.main.bounds.size.width - 20.0
15 | }
16 | class DynamicHeightCell: MDTableViewCell {
17 |
18 | var customLabel: UILabel!
19 | override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
20 | super.init(style: style, reuseIdentifier: reuseIdentifier)
21 | customLabel = UILabel(frame: self.contentView.bounds)
22 | customLabel.font = DynamicHeightCellConst.font
23 | customLabel.textColor = UIColor.orange
24 | customLabel.numberOfLines = 0
25 | contentView.addSubview(customLabel)
26 | }
27 | override func layoutSubviews() {
28 | super.layoutSubviews()
29 | customLabel.frame = CGRect(x: 20.0, y: 0, width: contentView.frame.size.width - 20.0, height: contentView.frame.size.height)
30 | }
31 | required init?(coder aDecoder: NSCoder) {
32 | fatalError("init(coder:) has not been implemented")
33 | }
34 | override func render(with row: RowConvertable) {
35 | super.render(with: row)
36 | guard let row = row as? DynamicHeightRow else {
37 | return
38 | }
39 | customLabel.text = row.title
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/DynamicHeightCellController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DynamicHeightCellController.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/16.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MDTable
11 |
12 | class DynamicHeightCellController: UITableViewController {
13 | var tableManager:TableManager!
14 | let appendArray = ["Wardell Stephen Curry II (born March 14, 1988) is an American professional basketball player for the Golden State Warriors of the National Basketball Association (NBA). ",
15 | "Many players and analysts have called him the greatest shooter in NBA history.[1] In 2014–15.",
16 | "Curry is the son of former NBA player Dell Curry and older brother of current NBA player Seth Curry.",
17 | "During the 2012–13 season, Curry set the NBA record for three-pointers made in a regular season with 272. He surpassed that record in 2015 with 286, and again in 2016 with 402. During the 2013–14 season, he and teammate Klay Thompson were nicknamed the 'Splash Brothers' en route to setting the NBA record for combined three-pointers in a season with 484, a record they broke the following season (525) and again in the 2015–16 season (678)."]
18 | override func viewDidLoad() {
19 | super.viewDidLoad()
20 | navigationItem.title = "Custom cell with Code"
21 | let rows = (1..<100).map { (index) -> DynamicHeightRow in
22 | let random = Int(arc4random()) % appendArray.count
23 | let content = appendArray[random]
24 | let row = DynamicHeightRow(title: content)
25 | row.didSelectRowAt = { (tableView, indexPath) in
26 | tableView.manager?.delete(row: indexPath)
27 | tableView.deleteRows(at: [indexPath], with: .automatic)
28 | }
29 | return row
30 | }
31 | let section = Section(rows: rows)
32 | section.heightForHeader = 30.0
33 | section.titleForHeader = "Tap Row to Delete"
34 | tableView.manager = TableManager(sections: [section])
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/DynamicHeightRow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DynamicHeightRow.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/16.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import MDTable
11 |
12 | class DynamicHeightRow: RowConvertable{
13 | //Protocol
14 | var rowHeight: CGFloat{
15 | get{
16 | let attributes = [NSFontAttributeName: DynamicHeightCellConst.font]
17 | let size = CGSize(width: DynamicHeightCellConst.cellWidth, height: .greatestFiniteMagnitude)
18 | let height = (self.title as NSString).boundingRect(with: size,
19 | options: [.usesLineFragmentOrigin],
20 | attributes: attributes,
21 | context: nil).size.height
22 | return height + 8.0
23 | }
24 | }
25 | var reuseIdentifier: String = "DynamicHeightRow"
26 | var initalType: RowConvertableInitalType = RowConvertableInitalType.code(className: DynamicHeightCell.self)
27 |
28 | //Optional evnet
29 | var didSelectRowAt: (UITableView, IndexPath) -> Void
30 |
31 | //Data
32 | var title:String
33 | init(title:String) {
34 | self.title = title
35 | self.didSelectRowAt = {_,_ in}
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/ExclusiveItemView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExclusiveCollectionCell.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/7.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | enum ExclusiveStyle{
12 | case fullScreen
13 | case halfScreen
14 | }
15 |
16 | class ExclusiveItemView: UIView{
17 | var avatarImageView: UIImageView!
18 | var describeLabel: UILabel!
19 | var coverImageView:UIImageView!
20 | var discImageView:UIImageView!
21 | var style:ExclusiveStyle = .halfScreen
22 | override init(frame: CGRect) {
23 | super.init(frame: frame)
24 | commonInit()
25 | }
26 |
27 | required init?(coder aDecoder: NSCoder) {
28 | fatalError("init(coder:) has not been implemented")
29 | }
30 | func commonInit(){
31 | avatarImageView = UIImageView().added(to: self)
32 | coverImageView = UIImageView().added(to: self)
33 | coverImageView.image = UIImage(named: "cm4_cover_top_mask")
34 | describeLabel = UILabel.title().added(to: self)
35 | describeLabel.numberOfLines = 2
36 | discImageView = UIImageView().added(to: self)
37 | discImageView.image = UIImage(named: "cm4_disc_type_video")
38 | }
39 | func config(_ exclusive:NMExclusive,style:ExclusiveStyle){
40 | self.avatarImageView.asyncSetImage(exclusive.avatar)
41 | self.describeLabel.text = exclusive.describe
42 | self.style = style
43 | setNeedsLayout()
44 | }
45 | override func layoutSubviews() {
46 | super.layoutSubviews()
47 | var aspectRadio:CGFloat = 0.0
48 | switch self.style {
49 | case .halfScreen:
50 | aspectRadio = 158.0 / 87.0
51 | case .fullScreen:
52 | aspectRadio = 320.0 / 115.0
53 | }
54 | avatarImageView.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.width / aspectRadio)
55 | coverImageView.frame = avatarImageView.frame
56 | discImageView.frame = CGRect(x: 4.0, y: 4.0, width: 22.0, height: 22.0)
57 | describeLabel.frame = CGRect(x: 4.0, y: coverImageView.maxY + 4.0, width: self.frame.width - 8.0, height: 35.0)
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/FPS.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FPS.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/26.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | class FPSLabel : UILabel{
13 | var displayLink:CADisplayLink!
14 | var lastTimeStamp:CFTimeInterval = -1.0
15 | var countPerFrame:Double = 0.0
16 | override init(frame: CGRect) {
17 | super.init(frame: frame)
18 | displayLink = CADisplayLink(target: self, selector: #selector(FPSLabel.handleDisplayLink(_:)))
19 | displayLink.add(to: RunLoop.main, forMode: .commonModes)
20 | self.font = UIFont.systemFont(ofSize: 14)
21 | self.backgroundColor = UIColor(red: 60.0 / 255.0, green: 145.0 / 255.0, blue: 82.0 / 255.0, alpha: 1.0)
22 | self.textColor = UIColor.white
23 | self.textAlignment = .center
24 | }
25 | func handleDisplayLink(_ sender:CADisplayLink){
26 | guard lastTimeStamp != -1.0 else {
27 | lastTimeStamp = displayLink.timestamp
28 | return
29 | }
30 | countPerFrame += 1
31 | let interval = displayLink.timestamp - lastTimeStamp
32 | guard interval >= 1.0 else {
33 | return
34 | }
35 | let fps = Int(round(countPerFrame / interval))
36 | self.text = "\(fps)"
37 | countPerFrame = 0
38 | lastTimeStamp = displayLink.timestamp
39 | }
40 | required init?(coder aDecoder: NSCoder) {
41 | fatalError("init(coder:) has not been implemented")
42 | }
43 | deinit {
44 | displayLink.remove(from: RunLoop.main, forMode: .commonModes)
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | MDTable
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UIStatusBarStyle
32 | UIStatusBarStyleLightContent
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeRight
37 |
38 | UISupportedInterfaceOrientations~ipad
39 |
40 | UIInterfaceOrientationPortrait
41 | UIInterfaceOrientationPortraitUpsideDown
42 | UIInterfaceOrientationLandscapeLeft
43 | UIInterfaceOrientationLandscapeRight
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/MusicItemView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MusicCollectionCell.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/11.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | enum MusicCollectionCellStyle {
12 | case normal
13 | case slogen
14 | }
15 | class MusicItemView: AvatarItemView {
16 | var titleLabel: UILabel!
17 | var subTitleLabel: UILabel!
18 | var coverImageView: UIImageView!
19 |
20 | override init(frame: CGRect) {
21 | super.init(frame: frame)
22 | commonInit()
23 | }
24 | func commonInit(){
25 | coverImageView = UIImageView(frame: CGRect.zero).added(to: self)
26 | titleLabel = UILabel.title().added(to: self)
27 | subTitleLabel = UILabel.subTitle().added(to: self)
28 | }
29 | override func layoutSubviews() {
30 | super.layoutSubviews()
31 | avatarImageView.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.width)
32 | coverImageView.frame = avatarImageView.frame
33 | titleLabel.frame = CGRect(x: 4.0, y: avatarImageView.maxY + 4.0, width: self.frame.width - 8.0, height: 15.0)
34 | subTitleLabel.frame = CGRect(x: 4.0, y: titleLabel.maxY + 2.0, width: self.frame.width - 8.0, height: 15.0)
35 | }
36 | required init?(coder aDecoder: NSCoder) {
37 | fatalError("init(coder:) has not been implemented")
38 | }
39 |
40 | func config(_ music:NMLatestMusic, style:MusicCollectionCellStyle){
41 | switch style {
42 | case .normal:
43 | coverImageView.isHidden = true
44 | default:
45 | coverImageView.image = UIImage(named: "cm4_disc_cover_new")
46 | coverImageView.isHidden = false
47 | }
48 | avatarImageView.asyncSetImage(music.avatar)
49 | titleLabel.text = music.title
50 | subTitleLabel.text = music.subTitle
51 | }
52 | }
53 |
54 | //新歌推荐
55 | class NMLatestMusic {
56 | var avatar:UIImage?
57 | var title:String
58 | var subTitle:String
59 | init(avatar:UIImage?, title:String,subTitle:String){
60 | self.avatar = avatar
61 | self.title = title
62 | self.subTitle = subTitle
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/PlaceHolder.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/MDTableExample/PlaceHolder.jpeg
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/ReorderTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwipteToDeleteController.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/16.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import MDTable
11 |
12 | class ReorderRow: Row, EditableRow{
13 | var titleForDeleteConfirmationButton: String? = nil
14 | var editingStyle:UITableViewCellEditingStyle = .none
15 | var canMove: Bool = true
16 | var shouldIndentWhileEditing: Bool = false
17 | }
18 |
19 | class ReorderTableViewController: UITableViewController {
20 | var tableManager:TableManager!
21 |
22 | override func viewDidLoad() {
23 | super.viewDidLoad()
24 | tableView.allowsSelectionDuringEditing = false
25 | navigationItem.title = "Reorder"
26 | tableView.setEditing(true, animated: false)
27 | let rows = (1..<100).map { (index) -> ReorderRow in
28 | let row = ReorderRow(title: "\(index)")
29 | return row
30 | }
31 | let section = Section(rows: rows)
32 | section.heightForHeader = 0.0
33 | let editor = TableEditor()
34 | editor.moveRowAtSourceIndexPathToDestinationIndexPath = {(tableView,sourceIndexPath,destinationIndexPath) in
35 | tableView.manager?.move(from: sourceIndexPath, to: destinationIndexPath)
36 | }
37 | tableView.manager = TableManager(sections: [section],editor:editor)
38 | }
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/SectionIndexTitleController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SectionIndexTitleController.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/17.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import MDTable
11 |
12 | class SectionIndexTitleController: UITableViewController {
13 | var tableManager:TableManager!
14 |
15 | override func viewDidLoad() {
16 | super.viewDidLoad()
17 | tableView.allowsSelectionDuringEditing = false
18 | navigationItem.title = "Index Titles"
19 |
20 | var sections = [Section]()
21 | for secionTitle in ["A","B","C","E","G","H","K","M","Z"]{
22 | var rows = [Row]()
23 | (1..<5).forEach{ (index) in
24 | rows.append(Row(title: "\(index)"))
25 | }
26 | let section = Section(rows: rows)
27 | section.heightForHeader = 30.0
28 | section.titleForHeader = secionTitle
29 | section.sectionIndexTitle = secionTitle
30 | sections.append(section)
31 | }
32 | tableView.manager = TableManager(sections: sections)
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/SortableSection.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SortableSection.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/7/13.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | protocol SortableSection {
12 | var sortTitle: String {get set}
13 | var sequence: Int {get set}
14 | var defaultSequeue:Int {get}
15 | var identifier: String {get}
16 | }
17 |
--------------------------------------------------------------------------------
/参考/MDTable-master/MDTableExample/XibRow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // XibRow.swift
3 | // MDTableExample
4 | //
5 | // Created by Leo on 2017/6/15.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import MDTable
11 |
12 | class XibRow:ReactiveRow{
13 |
14 | //Data
15 | var title:String
16 | var subTitle:String
17 | var image:UIImage?
18 | init(title:String, subTitle:String, image:UIImage?) {
19 | self.title = title
20 | self.subTitle = subTitle
21 | self.image = image
22 | super.init()
23 | self.rowHeight = 80.0
24 | self.initalType = RowConvertableInitalType.xib(xibName: "CusomCellWithXib")
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Screenshot/MainList.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/MDTable-master/Screenshot/MainList.png
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Cell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MDCellRenderable.swift
3 | // MDTableView
4 | //
5 | // Created by Leo on 2017/6/15.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 |
12 | open class MDTableViewCell:UITableViewCell{
13 | public typealias MDRowDataType = Row
14 | open func render(with row: RowConvertable) {
15 | if let row = row as? Row{
16 | self.textLabel?.text = row.title
17 | self.imageView?.image = row.image
18 | self.detailTextLabel?.text = row.detailTitle
19 | self.accessoryType = row.accessoryType
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Focus.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Focus.swift
3 | // MDTable
4 | //
5 | // Created by Leo on 2017/7/3.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 |
13 | public protocol TableFocusManager{
14 | func tableView(_ tableView: UITableView, canFocusRowAt indexPath: IndexPath) -> Bool
15 | @available(iOS 9.0, *)
16 | func tableView(_ tableView: UITableView, shouldUpdateFocusIn context: UITableViewFocusUpdateContext) -> Bool
17 | @available(iOS 9.0, *)
18 | func tableView(_ tableView: UITableView, didUpdateFocusIn context: UITableViewFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator)
19 | func indexPathForPreferredFocusedView(in tableView: UITableView) -> IndexPath?
20 | }
21 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Menu.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Menu.swift
3 | // MDTable
4 | //
5 | // Created by Leo on 2017/7/3.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 |
13 | public protocol TableMenuManager{
14 |
15 | func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool
16 |
17 | func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool
18 |
19 | func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?)
20 | }
21 |
22 |
23 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Preload.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Preload.swift
3 | // MDTable
4 | //
5 | // Created by Leo on 2017/7/13.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | /// Preload a row and save it to memory. So that when you scroll, you do not need to create this object any more.
12 | class TablePreloader{
13 | var preloadMap = [String:UITableViewCell]()
14 | var lock:NSRecursiveLock = NSRecursiveLock()
15 | func preload(_ row:RowConvertable,tableView:UITableView){
16 | assert(Thread.isMainThread)
17 | switch row.initalType{
18 | case .code(let cellClass):
19 | let cell = cellClass.init(style: row.cellStyle, reuseIdentifier: row.reuseIdentifier)
20 | preloadMap[row.reuseIdentifier] = cell
21 | case .xib(let xibName):
22 | let nib = UINib(nibName: xibName, bundle: Bundle.main)
23 | tableView.register(nib, forCellReuseIdentifier: row.reuseIdentifier)
24 | let cell = tableView.dequeueReusableCell(withIdentifier: row.reuseIdentifier)
25 | preloadMap[row.reuseIdentifier] = cell
26 | }
27 | }
28 | func reset(){
29 | lock.lock(); defer{ lock.unlock() }
30 | preloadMap.removeAll()
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Row.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseRow.swift
3 | // MDTable
4 | //
5 | // Created by Leo on 2017/7/3.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit
11 |
12 | open class Row:ReactiveRow{
13 | public var image:UIImage?
14 | public var title:String
15 | public var detailTitle:String?
16 | public var accessoryType: UITableViewCellAccessoryType
17 | public var cellStyle: UITableViewCellStyle = .default
18 | public init(title:String,
19 | image:UIImage? = nil,
20 | detailTitle:String? = nil,
21 | rowHeight:CGFloat = 44.0,
22 | accessoryType: UITableViewCellAccessoryType = .none) {
23 | self.image = image
24 | self.title = title
25 | self.detailTitle = detailTitle
26 | self.accessoryType = accessoryType
27 | super.init()
28 | self.rowHeight = rowHeight
29 | self.accessoryType = accessoryType
30 | }
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Table.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MDTable.swift
3 | // MDTableView
4 | //
5 | // Created by Leo on 2017/6/15.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import ObjectiveC
11 |
12 | struct MDTableConst{
13 | static let associatedKey = UnsafeRawPointer.init(bitPattern: "MDTableAccessoryKey".hashValue)
14 | }
15 | public extension UITableView{
16 | var manager:TableManager?{
17 | get{
18 | return objc_getAssociatedObject(self,MDTableConst.associatedKey) as? TableManager
19 | }set{
20 | asyncExecuteOnMain {
21 | newValue?.bindTo(tableView: self)
22 | objc_setAssociatedObject(self, MDTableConst.associatedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/参考/MDTable-master/Source/Util.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Util.swift
3 | // MDTable
4 | //
5 | // Created by Leo on 2017/7/27.
6 | // Copyright © 2017年 Leo Huang. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | func asyncExecuteOnMain(_ block:@escaping (Void)->Void){
12 | if Thread.isMainThread{
13 | block()
14 | }else{
15 | DispatchQueue.main.async {
16 | block()
17 | }
18 | }
19 | }
20 |
21 | func syncExecuteOnMain(_ block:@escaping (Void)->Void){
22 | if Thread.isMainThread{
23 | block()
24 | }else{
25 | DispatchQueue.main.sync {
26 | block()
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/critz.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/critz.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/ernesto.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/ernesto.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/lboaro.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/lboaro.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/macmini.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/macmini.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/pierre.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/pierre.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/xwu.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/project.xcworkspace/xcuserdata/xwu.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/xcshareddata/IDETemplateMacros.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | FILEHEADER
6 | / Copyright (c) ___YEAR___ Razeware LLC
7 | ///
8 | /// Permission is hereby granted, free of charge, to any person obtaining a copy
9 | /// of this software and associated documentation files (the "Software"), to deal
10 | /// in the Software without restriction, including without limitation the rights
11 | /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | /// copies of the Software, and to permit persons to whom the Software is
13 | /// furnished to do so, subject to the following conditions:
14 | ///
15 | /// The above copyright notice and this permission notice shall be included in
16 | /// all copies or substantial portions of the Software.
17 | ///
18 | /// Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
19 | /// distribute, sublicense, create a derivative work, and/or sell copies of the
20 | /// Software in any work that is designed, intended, or marketed for pedagogical or
21 | /// instructional purposes related to programming, coding, application development,
22 | /// or information technology. Permission for such use, copying, modification,
23 | /// merger, publication, distribution, sublicensing, creation of derivative works,
24 | /// or sale is expressly withheld.
25 | ///
26 | /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27 | /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28 | /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29 | /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30 | /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31 | /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
32 | /// THE SOFTWARE.
33 |
34 |
35 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/xcuserdata/shenjie.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | ModeratorsExplorer.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | D2A5F1FF1F4A9144005CD714
16 |
17 | primary
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/xcuserdata/xwu.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer.xcodeproj/xcuserdata/xwu.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | ModeratorsExplorer.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/AlertDisplayer.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 | import UIKit
4 |
5 | protocol AlertDisplayer {
6 | func displayAlert(with title: String, message: String, actions: [UIAlertAction]?)
7 | }
8 |
9 | extension AlertDisplayer where Self: UIViewController {
10 | func displayAlert(with title: String, message: String, actions: [UIAlertAction]? = nil) {
11 | guard presentedViewController == nil else {
12 | return
13 | }
14 |
15 | let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
16 | actions?.forEach { action in
17 | alertController.addAction(action)
18 | }
19 | present(alertController, animated: true)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/AppDelegate.swift:
--------------------------------------------------------------------------------
1 |
2 | import UIKit
3 |
4 | @UIApplicationMain
5 | class AppDelegate: UIResponder, UIApplicationDelegate {
6 | var window: UIWindow?
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon1024.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon20.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon20@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon29.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon29@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon40.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon40@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon76.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon76@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/Icon83.5@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-20@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-20@3x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-29@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-29@3x copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-29@3x copy.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-40@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-40@3x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-60@2x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/AppIcon.appiconset/icon-app-60@3x.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/rw-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Razewarelogo_1024.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/rw-logo.imageset/Razewarelogo_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/rw-logo.imageset/Razewarelogo_1024.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/rwdevcon-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-bg.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/rwdevcon-bg.imageset/rwdevcon-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/rwdevcon-bg.imageset/rwdevcon-bg.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/se-icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "se-icon.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/se-icon.imageset/se-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Assets.xcassets/se-icon.imageset/se-icon.png
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/ButtonEnablingBehavior.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 | import UIKit
4 |
5 | final class ButtonEnablingBehavior: NSObject {
6 | let textFields: [UITextField]
7 |
8 | let onChange: (Bool) -> Void
9 |
10 | init(textFields: [UITextField], onChange: @escaping (Bool) -> Void) {
11 | self.textFields = textFields
12 | self.onChange = onChange
13 | super.init()
14 | setup()
15 | }
16 |
17 | private func setup() {
18 | textFields.forEach { textField in
19 | textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
20 | }
21 | onChange(false)
22 | }
23 |
24 | @objc func textFieldDidChange(_ textField: UITextField) {
25 | var enable = true
26 | for textField in textFields {
27 | guard let text = textField.text, !text.isEmpty else {
28 | enable = false
29 | break
30 | }
31 | }
32 | onChange(enable)
33 | }
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/ColorPalette.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 | import UIKit
4 |
5 | struct ColorPalette {
6 | static let RWGreen = UIColor(red: CGFloat(0), green: CGFloat(104/255.0), blue: CGFloat(55/255.0), alpha: CGFloat(1.0))
7 | }
8 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Controllers/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Controllers/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Controllers/ModeratorsSearchViewController.swift:
--------------------------------------------------------------------------------
1 |
2 | import UIKit
3 |
4 | class ModeratorsSearchViewController: UIViewController {
5 | private enum SegueIdentifiers {
6 | static let list = "ListViewController"
7 | }
8 |
9 | @IBOutlet var siteTextField: UITextField!
10 | @IBOutlet var searchButton: UIButton!
11 |
12 | private var behavior: ButtonEnablingBehavior!
13 |
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 |
17 | title = NSLocalizedString("Search", comment: "")
18 |
19 | behavior = ButtonEnablingBehavior(textFields: [siteTextField]) { [unowned self] enable in
20 | if enable {
21 | self.searchButton.isEnabled = true
22 | self.searchButton.alpha = 1
23 | } else {
24 | self.searchButton.isEnabled = false
25 | self.searchButton.alpha = 0.7
26 | }
27 | }
28 |
29 | siteTextField.setBottomBorder()
30 | }
31 |
32 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
33 | if segue.identifier == SegueIdentifiers.list {
34 | if let listViewController = segue.destination as? ModeratorsListViewController {
35 | listViewController.site = siteTextField.text!
36 | }
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Double+Extensions.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | extension Double {
5 | static let formatter: NumberFormatter = {
6 | let formatter = NumberFormatter()
7 | formatter.numberStyle = NumberFormatter.Style.decimal
8 | return formatter
9 | }()
10 |
11 | var formatted: String {
12 | return Double.formatter.string(for: self) ?? String(self)
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/HTTPURLResponse.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | extension HTTPURLResponse {
5 | var hasSuccessStatusCode: Bool {
6 | return 200...299 ~= statusCode
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | NSAppTransportSecurity
24 |
25 | NSAllowsArbitraryLoads
26 |
27 |
28 | UILaunchStoryboardName
29 | LaunchScreen
30 | UIMainStoryboardFile
31 | Main
32 | UIRequiredDeviceCapabilities
33 |
34 | armv7
35 |
36 | UISupportedInterfaceOrientations
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UISupportedInterfaceOrientations~ipad
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationPortraitUpsideDown
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Models/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Models/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Models/Moderator.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | struct Moderator: Decodable {
5 | let displayName: String
6 | let reputation: String
7 |
8 | enum CodingKeys: String, CodingKey {
9 | case displayName = "display_name"
10 | case reputation
11 | }
12 |
13 | init(displayName: String, reputation: String) {
14 | self.displayName = displayName
15 | self.reputation = reputation
16 | }
17 |
18 | init(from decoder: Decoder) throws {
19 | let container = try decoder.container(keyedBy: CodingKeys.self)
20 | let displayName = try container.decode(String.self, forKey: .displayName)
21 | let reputation = try container.decode(Double.self, forKey: .reputation)
22 | self.init(displayName: displayName.html2String, reputation: reputation.formatted)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Networking/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Networking/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Networking/DataResponseError.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | enum DataResponseError: Error {
5 | case network
6 | case decoding
7 |
8 | var reason: String {
9 | switch self {
10 | case .network:
11 | return "An error occurred while fetching data ".localizedString
12 | case .decoding:
13 | return "An error occurred while decoding data".localizedString
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Networking/ModeratorRequest.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | struct ModeratorRequest {
5 | var path: String {
6 | return "users/moderators"
7 | }
8 |
9 | let parameters: Parameters
10 | private init(parameters: Parameters) {
11 | self.parameters = parameters
12 | }
13 | }
14 |
15 | extension ModeratorRequest {
16 | static func from(site: String) -> ModeratorRequest {
17 | let defaultParameters = ["order": "desc", "sort": "reputation", "filter": "!-*jbN0CeyJHb"]
18 | let parameters = ["site": "\(site)"].merging(defaultParameters, uniquingKeysWith: +)
19 | return ModeratorRequest(parameters: parameters)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Networking/PagedModeratorResponse.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | struct PagedModeratorResponse: Decodable {
5 | let moderators: [Moderator]
6 | let total: Int
7 | let hasMore: Bool
8 | let page: Int
9 |
10 | enum CodingKeys: String, CodingKey {
11 | case moderators = "items"
12 | case hasMore = "has_more"
13 | case total
14 | case page
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Networking/URLRequest.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | typealias Parameters = [String: String]
5 |
6 | extension URLRequest {
7 | func encode(with parameters: Parameters?) -> URLRequest {
8 | guard let parameters = parameters else {
9 | return self
10 | }
11 |
12 | var encodedURLRequest = self
13 |
14 | if let url = self.url,
15 | let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false),
16 | !parameters.isEmpty {
17 | var newUrlComponents = urlComponents
18 | let queryItems = parameters.map { key, value in
19 | URLQueryItem(name: key, value: value)
20 | }
21 | newUrlComponents.queryItems = queryItems
22 | encodedURLRequest.url = newUrlComponents.url
23 | return encodedURLRequest
24 | } else {
25 | return self
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/Result.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | enum Result {
5 | case success(T)
6 | case failure(U)
7 | }
8 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Services/StackExchangeClient.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | final class StackExchangeClient {
5 | private lazy var baseURL: URL = {
6 | return URL(string: "http://api.stackexchange.com/2.2/")!
7 | }()
8 |
9 | let session: URLSession
10 |
11 | init(session: URLSession = URLSession.shared) {
12 | self.session = session
13 | }
14 |
15 | func fetchModerators(with request: ModeratorRequest, page: Int, completion: @escaping (Result) -> Void) {
16 |
17 | let urlRequest = URLRequest(url: baseURL.appendingPathComponent(request.path))
18 | let parameters = ["page": "\(page)"].merging(request.parameters, uniquingKeysWith: +)
19 | let encodedURLRequest = urlRequest.encode(with: parameters)
20 |
21 | session.dataTask(with: encodedURLRequest, completionHandler: { (data, response, error) in
22 | guard
23 | let httpResponse = response as? HTTPURLResponse,
24 | httpResponse.hasSuccessStatusCode,
25 | let data = data
26 | else {
27 | completion(Result.failure(DataResponseError.network))
28 | return
29 | }
30 |
31 | guard let decodedResponse = try? JSONDecoder().decode(PagedModeratorResponse.self, from: data) else {
32 | completion(Result.failure(DataResponseError.decoding))
33 | return
34 | }
35 |
36 | completion(Result.success(decodedResponse))
37 |
38 | }).resume()
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/String+Extensions.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 |
4 | extension String {
5 | var localizedString: String {
6 | return NSLocalizedString(self, comment: "")
7 | }
8 |
9 | var html2String: String {
10 | guard let data = data(using: .utf8), let attributedString = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil) else {
11 | return self
12 | }
13 | return attributedString.string
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/UITextField+Extensions.swift:
--------------------------------------------------------------------------------
1 |
2 | import Foundation
3 | import UIKit
4 |
5 | extension UITextField {
6 | func setBottomBorder() {
7 | borderStyle = .none
8 | layer.backgroundColor = UIColor.white.cgColor
9 |
10 | layer.masksToBounds = false
11 |
12 | layer.shadowColor = ColorPalette.RWGreen.cgColor
13 | layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
14 | layer.shadowOpacity = 1.0
15 | layer.shadowRadius = 0.0
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/ViewModels/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/ViewModels/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Views/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/ModeratorsExplorer-master/ModeratorsExplorer/Views/.DS_Store
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/ModeratorsExplorer/Views/ModeratorTableViewCell.swift:
--------------------------------------------------------------------------------
1 |
2 | import UIKit
3 |
4 | class ModeratorTableViewCell: UITableViewCell {
5 | @IBOutlet var displayNameLabel: UILabel!
6 | @IBOutlet var reputationLabel: UILabel!
7 | @IBOutlet var reputationContainerView: UIView!
8 | @IBOutlet var indicatorView: UIActivityIndicatorView!
9 |
10 | override func prepareForReuse() {
11 | super.prepareForReuse()
12 |
13 | configure(with: .none)
14 | }
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 |
19 | reputationContainerView.backgroundColor = .lightGray
20 | reputationContainerView.layer.cornerRadius = 6
21 |
22 | indicatorView.hidesWhenStopped = true
23 | indicatorView.color = ColorPalette.RWGreen
24 | }
25 |
26 | func configure(with moderator: Moderator?) {
27 | if let moderator = moderator {
28 | displayNameLabel?.text = moderator.displayName
29 | reputationLabel?.text = moderator.reputation
30 | displayNameLabel.alpha = 1
31 | reputationContainerView.alpha = 1
32 | indicatorView.stopAnimating()
33 | } else {
34 | displayNameLabel.alpha = 0
35 | reputationContainerView.alpha = 0
36 | indicatorView.startAnimating()
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/参考/ModeratorsExplorer-master/README.md:
--------------------------------------------------------------------------------
1 | # ModeratorsExplorer
2 |
3 | UITableView Infinite Scrolling
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/.gitignore:
--------------------------------------------------------------------------------
1 | ## System
2 | .DS_Store
3 |
4 | ## Build generated
5 | build/
6 | DerivedData
7 | Nuke.xcodeproj/xcshareddata/xcbaselines/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata
19 |
20 | ## Other
21 | *.xccheckout
22 | *.moved-aside
23 | *.xcuserstate
24 | *.xcscmblueprint
25 |
26 | ## Obj-C/Swift specific
27 | *.hmap
28 | *.ipa
29 |
30 | ## Playgrounds
31 | timeline.xctimeline
32 | playground.xcworkspace
33 |
34 |
35 | ## Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 |
40 | .build/
41 |
42 |
43 | ## CocoaPods
44 | #
45 | # We recommend against adding the Pods directory to your .gitignore. However
46 | # you should judge for yourself, the pros and cons are mentioned at:
47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
48 | #
49 |
50 | Pods/
51 |
52 |
53 | ## Carthage
54 | #
55 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
56 |
57 | Carthage
58 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/NukeDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/NukeDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/NukeDemo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "object": {
3 | "pins": [
4 | {
5 | "package": "Alamofire",
6 | "repositoryURL": "https://github.com/Alamofire/Alamofire",
7 | "state": {
8 | "branch": null,
9 | "revision": "eaf6e622dd41b07b251d8f01752eab31bc811493",
10 | "version": "5.4.1"
11 | }
12 | },
13 | {
14 | "package": "FetchImage",
15 | "repositoryURL": "https://github.com/kean/FetchImage.git",
16 | "state": {
17 | "branch": "master",
18 | "revision": "68f136bc6c0f8ed3f5d4d97650a715dd2bbec0d1",
19 | "version": null
20 | }
21 | },
22 | {
23 | "package": "Gifu",
24 | "repositoryURL": "https://github.com/kaishin/Gifu.git",
25 | "state": {
26 | "branch": null,
27 | "revision": "0ffe24744cc3d82ab9edece53670d0352c6d5507",
28 | "version": "3.3.0"
29 | }
30 | },
31 | {
32 | "package": "Nuke",
33 | "repositoryURL": "https://github.com/kean/Nuke",
34 | "state": {
35 | "branch": "master",
36 | "revision": "d5dc8508633b462dd9bf415ec449fd55cdd3a1ae",
37 | "version": null
38 | }
39 | },
40 | {
41 | "package": "ScrollViewPrefetcher",
42 | "repositoryURL": "https://github.com/kean/ScrollViewPrefetcher",
43 | "state": {
44 | "branch": "main",
45 | "revision": "65fd13d5a6dc90603ba71f9296402b507a192468",
46 | "version": null
47 | }
48 | },
49 | {
50 | "package": "SwiftSVG",
51 | "repositoryURL": "https://github.com/mchoe/SwiftSVG.git",
52 | "state": {
53 | "branch": null,
54 | "revision": "c3a8866a25ace169ee8e5c037670ba14aa59606f",
55 | "version": "2.3.2"
56 | }
57 | }
58 | ]
59 | },
60 | "version": 1
61 | }
62 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/README.md:
--------------------------------------------------------------------------------
1 | # Nuke Demo
2 |
3 | To run the demo, open the Xcode project from the repo, and run it.
4 |
5 | 
6 |
7 |
8 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/100.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/114.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/120.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/144.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/152.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/167.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/180.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/20.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/29.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/40.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/50.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/57.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/58.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/60.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/72.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/76.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/80.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/Images.xcassets/AppIcon.appiconset/87.png
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | Nuke Demo
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UIRequiredDeviceCapabilities
32 |
33 | armv7
34 |
35 | UISupportedInterfaceOrientations
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationLandscapeLeft
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/baseline.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/baseline.jpeg
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Resources/progressive.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/NukeDemo-main/Resources/progressive.jpeg
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Sources/AlamofireIntegrationDemoViewController.swift:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean).
4 |
5 | import UIKit
6 | import Nuke
7 | import Alamofire
8 |
9 | final class AlamofireIntegrationDemoViewController: BasicDemoViewController {
10 | override func viewDidLoad() {
11 | super.viewDidLoad()
12 |
13 | pipeline = ImagePipeline {
14 | $0.dataLoader = AlamofireDataLoader()
15 | $0.imageCache = ImageCache()
16 | }
17 | }
18 | }
19 |
20 | /// Implements data loading using Alamofire framework.
21 | public class AlamofireDataLoader: Nuke.DataLoading {
22 | public let session: Alamofire.Session
23 |
24 | /// Initializes the receiver with a given Alamofire.SessionManager.
25 | /// - parameter session: Alamofire.Session.default by default.
26 | public init(session: Alamofire.Session = Alamofire.Session.default) {
27 | self.session = session
28 | }
29 |
30 | // MARK: DataLoading
31 |
32 | /// Loads data using Alamofire.SessionManager.
33 | public func loadData(with request: URLRequest, didReceiveData: @escaping (Data, URLResponse) -> Void, completion: @escaping (Error?) -> Void) -> Cancellable {
34 | // Alamofire.SessionManager automatically starts requests as soon as they are created (see `startRequestsImmediately`)
35 | let task = self.session.streamRequest(request)
36 | task.responseStream { [weak task] stream in
37 | switch stream.event {
38 | case let .stream(result):
39 | switch result {
40 | case let .success(data):
41 | guard let response = task?.response else { return } // Never nil
42 | didReceiveData(data, response)
43 | }
44 | case let .complete(response):
45 | completion(response.error)
46 | }
47 | }
48 | return AnyCancellable {
49 | task.cancel()
50 | }
51 | }
52 | }
53 |
54 | private final class AnyCancellable: Nuke.Cancellable {
55 | let closure: () -> Void
56 |
57 | init(_ closure: @escaping () -> Void) {
58 | self.closure = closure
59 | }
60 |
61 | func cancel() {
62 | closure()
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Sources/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean).
4 |
5 | import UIKit
6 | import Nuke
7 |
8 | @UIApplicationMain
9 | class AppDelegate: UIResponder, UIApplicationDelegate {
10 |
11 | var window: UIWindow?
12 |
13 | func applicationDidFinishLaunching(_ application: UIApplication) {
14 | window?.tintColor = UIColor.systemPink
15 | ImagePipeline.Configuration.isSignpostLoggingEnabled = true
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Sources/DataCachingDemoViewController.swift:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean).
4 |
5 | import UIKit
6 | import Nuke
7 |
8 | final class DataCachingDemoViewController: BasicDemoViewController {
9 | override func viewDidLoad() {
10 | super.viewDidLoad()
11 |
12 | pipeline = ImagePipeline {
13 | $0.dataLoader = DataLoader(configuration: {
14 | // Disable disk caching built into URLSession
15 | let conf = DataLoader.defaultConfiguration
16 | conf.urlCache = nil
17 | return conf
18 | }())
19 |
20 | $0.imageCache = ImageCache()
21 | $0.dataCache = try! DataCache(name: "com.github.kean.Nuke.DataCache")
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Sources/PrefetchingDemoViewController.swift:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean).
4 |
5 | import UIKit
6 | import Nuke
7 |
8 | private let cellReuseID = "reuseID"
9 | private var loggingEnabled = true
10 |
11 | final class PrefetchingDemoViewController: BasicDemoViewController, UICollectionViewDataSourcePrefetching {
12 | let prefetcher = ImagePrefetcher()
13 |
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 |
17 | collectionView?.isPrefetchingEnabled = true
18 | collectionView?.prefetchDataSource = self
19 | }
20 |
21 | override func viewWillAppear(_ animated: Bool) {
22 | super.viewWillAppear(animated)
23 |
24 | prefetcher.isPaused = false
25 | }
26 |
27 | override func viewWillDisappear(_ animated: Bool) {
28 | super.viewWillDisappear(animated)
29 |
30 | prefetcher.isPaused = true
31 | }
32 |
33 | // MARK: UICollectionViewDataSourcePrefetching
34 |
35 | func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
36 | let urls = indexPaths.map { photos[$0.row] }
37 | prefetcher.startPrefetching(with: urls)
38 | if loggingEnabled {
39 | print("prefetchItemsAt: \(stringForIndexPaths(indexPaths))")
40 | }
41 | }
42 |
43 | func collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath]) {
44 | let urls = indexPaths.map { photos[$0.row] }
45 | prefetcher.startPrefetching(with: urls)
46 | if loggingEnabled {
47 | print("cancelPrefetchingForItemsAt: \(stringForIndexPaths(indexPaths))")
48 | }
49 | }
50 | }
51 |
52 | private func stringForIndexPaths(_ indexPaths: [IndexPath]) -> String {
53 | guard indexPaths.count > 0 else {
54 | return "[]"
55 | }
56 | let items = indexPaths
57 | .map { return "\(($0 as NSIndexPath).item)" }
58 | .joined(separator: " ")
59 | return "[\(items)]"
60 | }
61 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Sources/RateLimiterDemoViewController.swift:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean).
4 |
5 | import UIKit
6 | import Nuke
7 |
8 | private let cellReuseID = "reuseID"
9 |
10 | final class RateLimiterDemoViewController: BasicDemoViewController {
11 | override func viewDidLoad() {
12 | super.viewDidLoad()
13 |
14 | itemsPerRow = 10
15 |
16 | pipeline = ImagePipeline {
17 | let urlSessionConf = URLSessionConfiguration.default
18 | urlSessionConf.urlCache = nil // disable disk cache
19 | $0.dataLoader = DataLoader(configuration: urlSessionConf)
20 |
21 | $0.imageCache = nil // disable memory cache
22 |
23 | $0.isDeduplicationEnabled = false // disable deduplication
24 | }
25 |
26 | for _ in 0..<10 {
27 | photos.append(contentsOf: photos)
28 | }
29 | }
30 |
31 | override func makeRequest(with url: URL, cellSize: CGSize) -> ImageRequest {
32 | return ImageRequest(url: url, processors: [ImageProcessors.Resize(size: cellSize)])
33 | }
34 |
35 | override func makeImageLoadingOptions() -> ImageLoadingOptions {
36 | return ImageLoadingOptions() // no transition animations
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/参考/NukeDemo-main/Sources/SwiftSVGDemoViewController.swift:
--------------------------------------------------------------------------------
1 | // The MIT License (MIT)
2 | //
3 | // Copyright (c) 2015-2021 Alexander Grebenyuk (github.com/kean).
4 |
5 | import UIKit
6 | import Nuke
7 | import SwiftSVG
8 |
9 | final class SwiftSVGDemoViewController: UIViewController {
10 | override func viewDidLoad() {
11 | super.viewDidLoad()
12 |
13 | view.backgroundColor = UIColor.systemBackground
14 |
15 | ImageDecoderRegistry.shared.register { context in
16 | // Replace this with whatever works for. There are no magic numbers
17 | // for SVG like are used for other binary formats, it's just XML.
18 | let isSVG = context.urlResponse?.url?.absoluteString.hasSuffix(".svg") ?? false
19 | return isSVG ? ImageDecoders.Empty() : nil
20 | }
21 |
22 | let url = URL(string: "https://upload.wikimedia.org/wikipedia/commons/9/9d/Swift_logo.svg")!
23 |
24 | // If you know that all images downloaded by the pipeline are going to be SVG,
25 | // you can just call `loadData(with:)` instead and not register an Empty decoder.
26 | ImagePipeline.shared.loadImage(with: url) { [weak self] result in
27 | guard let self = self, let data = try? result.get().container.data else {
28 | return
29 | }
30 |
31 | // You can render image using whatever size you want, vector!
32 | let targetBounds = CGRect(origin: .zero, size: CGSize(width: 300, height: 300))
33 | let svgView = UIView(SVGData: data) { layer in
34 | layer.fillColor = UIColor.orange.cgColor
35 | layer.resizeToFit(targetBounds)
36 | }
37 | self.view.addSubview(svgView)
38 |
39 | svgView.bounds = targetBounds
40 | svgView.center = self.view.center
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | ## Playgrounds
32 | timeline.xctimeline
33 | playground.xcworkspace
34 |
35 | # Swift Package Manager
36 | #
37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
38 | # Packages/
39 | # Package.pins
40 | # Package.resolved
41 | .build/
42 |
43 | # CocoaPods
44 | #
45 | # We recommend against adding the Pods directory to your .gitignore. However
46 | # you should judge for yourself, the pros and cons are mentioned at:
47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
48 | #
49 | # Pods/
50 | #
51 | # Add this line if you want to avoid checking in source code from the Xcode workspace
52 | # *.xcworkspace
53 |
54 | # Carthage
55 | #
56 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
57 | # Carthage/Checkouts
58 |
59 | Carthage/Build
60 |
61 | # fastlane
62 | #
63 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
64 | # screenshots whenever they are needed.
65 | # For more information about the recommended setup visit:
66 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
67 |
68 | fastlane/report.xml
69 | fastlane/Preview.html
70 | fastlane/screenshots/**/*.png
71 | fastlane/test_output
72 |
73 | # Code Injection
74 | #
75 | # After new code Injection tools there's a generated folder /iOSInjectionProject
76 | # https://github.com/johnno1962/injectionforxcode
77 |
78 | iOSInjectionProject/
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch/Models/ImageDataStore.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageDataStore.swift
3 | // TableViewPrefetch
4 | //
5 | // Created by Rokon Uddin on 12/7/18.
6 | // Copyright © 2018 Rokon Uddin. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import UIKit.UIImage
11 |
12 | let baseURL = "https://robohash.org/"
13 |
14 | class ImageDataStore {
15 | private var images = (1...200)
16 | .map { ImageModel(url: baseURL+"\($0).png",
17 | order: $0) }
18 | public var numberOfImage: Int {
19 | return images.count
20 | }
21 |
22 | public func loadImage(at index: Int) -> DataLoadOperation? {
23 | if (0.. ())?
33 | private var _image: ImageModel
34 |
35 | init(_ image: ImageModel) {
36 | _image = image
37 | }
38 |
39 | override func main() {
40 | if isCancelled { return }
41 | guard let url = _image.url else { return }
42 | downloadImageFrom(url) { (image) in
43 | DispatchQueue.main.async() { [weak self] in
44 | guard let `self` = self else { return }
45 | if self.isCancelled { return }
46 | self.image = image
47 | self.loadingCompleteHandler?(self.image)
48 | }
49 | }
50 | }
51 | }
52 |
53 | func downloadImageFrom(_ url: URL, completeHandler: @escaping (UIImage?) -> ()) {
54 | URLSession.shared.dataTask(with: url) { data, response, error in
55 | guard
56 | let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
57 | let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
58 | let data = data, error == nil,
59 | let _image = UIImage(data: data)
60 | else { return }
61 | completeHandler(_image)
62 | }.resume()
63 | }
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch/Models/ImageModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageModel.swift
3 | // TableViewPrefetch
4 | //
5 | // Created by Rokon Uddin on 12/7/18.
6 | // Copyright © 2018 Rokon Uddin. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct ImageModel {
12 | public private(set) var url: URL?
13 | let order: Int
14 |
15 | init(url: String?, order: Int) {
16 | self.url = url?.toURL
17 | self.order = order
18 | }
19 | }
20 |
21 | public extension String {
22 | var toURL: URL? {
23 | return URL(string: self)
24 | }
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch/Other Gubbins/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch/Other Gubbins/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch/Other Gubbins/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/参考/TableViewPrefetch-master/TableViewPrefetch/Views/ImageTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageTableViewCell.swift
3 | // TableViewPrefetch
4 | //
5 | // Created by Rokon Uddin on 12/7/18.
6 | // Copyright © 2018 Rokon Uddin. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ImageTableViewCell: UITableViewCell {
12 | @IBOutlet weak var loadingIndicator: UIActivityIndicatorView!
13 | @IBOutlet weak var thumbImageView: UIImageView!
14 |
15 | override func awakeFromNib() {
16 | super.awakeFromNib()
17 | }
18 |
19 | func updateAppearanceFor(_ image: UIImage?) {
20 | DispatchQueue.main.async { [unowned self] in
21 | self.displayImage(image)
22 | }
23 | }
24 |
25 | private func displayImage(_ image: UIImage?) {
26 | if let _image = image {
27 | thumbImageView.image = _image
28 | loadingIndicator.stopAnimating()
29 | } else {
30 | loadingIndicator.startAnimating()
31 | thumbImageView.image = .none
32 | }
33 | }
34 |
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch.xcodeproj/project.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/prefetch-master/Prefetch.xcodeproj/project.xcworkspace/xcuserdata/shenjie.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch.xcodeproj/project.xcworkspace/xcuserdata/soul.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/prefetch-master/Prefetch.xcodeproj/project.xcworkspace/xcuserdata/soul.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch.xcodeproj/xcuserdata/shenjie.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Prefetch.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch.xcodeproj/xcuserdata/soul.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Prefetch.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 16/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
18 | // Override point for customization after application launch.
19 | return true
20 | }
21 |
22 | func applicationWillResignActive(_ application: UIApplication) {
23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
25 | }
26 |
27 | func applicationDidEnterBackground(_ application: UIApplication) {
28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
30 | }
31 |
32 | func applicationWillEnterForeground(_ application: UIApplication) {
33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
34 | }
35 |
36 | func applicationDidBecomeActive(_ application: UIApplication) {
37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
38 | }
39 |
40 | func applicationWillTerminate(_ application: UIApplication) {
41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "font-awesome_4-7-0_align-justify_16_0_007dff_none.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "font-awesome_4-7-0_align-justify_32_0_007dff_none.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "font-awesome_4-7-0_align-justify_48_0_007dff_none.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/font-awesome_4-7-0_align-justify_16_0_007dff_none.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/font-awesome_4-7-0_align-justify_16_0_007dff_none.png
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/font-awesome_4-7-0_align-justify_32_0_007dff_none.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/font-awesome_4-7-0_align-justify_32_0_007dff_none.png
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/font-awesome_4-7-0_align-justify_48_0_007dff_none.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/prefetch-master/Prefetch/Assets.xcassets/row.imageset/font-awesome_4-7-0_align-justify_48_0_007dff_none.png
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Model/Coin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Cryptocurrency.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 17/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct CoinList : Decodable {
12 | let data : [String : Coin]
13 | }
14 |
15 | struct Coin : Decodable {
16 | let id : Int
17 | let name : String
18 | let symbol : String
19 | let rank : Int
20 | let quotes : [String : Price]
21 | }
22 |
23 | struct Price : Decodable {
24 | let price : Double
25 | }
26 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Model/News.swift:
--------------------------------------------------------------------------------
1 | //
2 | // News.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 16/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 |
12 | struct News: Decodable {
13 | let title: String
14 | let url: String?
15 | let by: String
16 | }
17 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/Model/Post.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Post.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 17/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | struct Post : Decodable {
12 | let userID : Int
13 | let postID : Int
14 | let title : String
15 | let body : String
16 |
17 | enum CodingKeys : String, CodingKey {
18 | case userID = "userId"
19 | case postID = "id"
20 | case title
21 | case body
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/View/CoinTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CoinTableViewCell.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 17/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CoinTableViewCell: UITableViewCell {
12 |
13 | @IBOutlet weak var nameLabel: UILabel!
14 |
15 | @IBOutlet weak var symbolLabel: UILabel!
16 |
17 | @IBOutlet weak var priceLabel: UILabel!
18 |
19 | @IBOutlet weak var rankLabel: UILabel!
20 |
21 | override func awakeFromNib() {
22 | super.awakeFromNib()
23 | // Initialization code
24 | }
25 |
26 | override func setSelected(_ selected: Bool, animated: Bool) {
27 | super.setSelected(selected, animated: animated)
28 |
29 | // Configure the view for the selected state
30 | }
31 |
32 | func configureCell(with coin: Coin){
33 | self.nameLabel.text = coin.name
34 | self.symbolLabel.text = coin.symbol
35 | self.rankLabel.text = "# \(coin.rank)"
36 | self.priceLabel.text = "$ \(coin.quotes["USD"]!.price)"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/View/LoadingTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LoadingTableViewCell.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 17/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class LoadingTableViewCell: UITableViewCell {
12 |
13 | @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
14 |
15 | override func awakeFromNib() {
16 | super.awakeFromNib()
17 | // Initialization code
18 | }
19 |
20 | override func setSelected(_ selected: Bool, animated: Bool) {
21 | super.setSelected(selected, animated: animated)
22 |
23 | // Configure the view for the selected state
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/View/NewsTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NewsTableViewCell.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 16/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class NewsTableViewCell: UITableViewCell {
12 |
13 | @IBOutlet weak var titleLabel: UILabel!
14 | @IBOutlet weak var urlLabel: UILabel!
15 | @IBOutlet weak var authorLabel: UILabel!
16 |
17 |
18 | override func awakeFromNib() {
19 | super.awakeFromNib()
20 | // Initialization code
21 | }
22 |
23 | override func setSelected(_ selected: Bool, animated: Bool) {
24 | super.setSelected(selected, animated: animated)
25 |
26 | // Configure the view for the selected state
27 | }
28 |
29 | func configureCell(with news: News){
30 | self.titleLabel.text = news.title
31 | self.urlLabel.text = news.url
32 | self.authorLabel.text = news.by
33 | }
34 |
35 | func truncateCell(){
36 | self.titleLabel.text = "Loading..."
37 | self.urlLabel.text = "Loading..."
38 | self.authorLabel.text = "Loading..."
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/参考/prefetch-master/Prefetch/View/PostTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PostTableViewCell.swift
3 | // Prefetch
4 | //
5 | // Created by Soul on 17/07/2018.
6 | // Copyright © 2018 Fluffy. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class PostTableViewCell: UITableViewCell {
12 |
13 | @IBOutlet weak var titleLabel: UILabel!
14 | @IBOutlet weak var bodyLabel: UILabel!
15 |
16 |
17 | override func awakeFromNib() {
18 | super.awakeFromNib()
19 | // Initialization code
20 | }
21 |
22 | override func setSelected(_ selected: Bool, animated: Bool) {
23 | super.setSelected(selected, animated: animated)
24 |
25 | // Configure the view for the selected state
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/参考/prefetch-master/README.md:
--------------------------------------------------------------------------------
1 | # Prefetch sample project
2 |
3 | Sample iOS Project using UITableViewDataSourcePrefetch
4 |
5 | 
6 |
--------------------------------------------------------------------------------
/参考/prefetch-master/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShenJieSuzhou/PreloadDemo/d39fc02a550d98d1b972652b042e36ab639b5b1e/参考/prefetch-master/screenshot.png
--------------------------------------------------------------------------------