? SkelectionView是以一種優(yōu)雅的方式向用戶展示正在發(fā)生的事情.相比菊花loading而言我個(gè)人認(rèn)為更直觀的讓用戶了解到了他們正在等待的內(nèi)容.
這是個(gè)開源的SDK.支持的操作系統(tǒng)和SDK版本:iOS9.0+,swift4
安裝
使用CocoaPods:
編輯podfile:
pod 'SkeletonView'
如何使用
1.導(dǎo)入SkeletonView
import?SkeletonView
2.設(shè)置哪些view skeletonables,有兩種方法可以實(shí)現(xiàn)
使用代碼:
imageview.isSkeletonable = true
使用IB/Storyboards:
3.設(shè)置了視圖之后,要show出來(lái)skeleton,這里有4中表現(xiàn)形式:
1)view.showSkeleton() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //實(shí)體
2)view.showGradientSkeleton() ? ? ? ? ? ? ? ? ?//漸變
3)view.showAnimatedSkeleton() ? ? ? ? ? ? ? ?//實(shí)體動(dòng)畫
4)view.showAnimatedGradientSkeleton() ?//漸變動(dòng)畫
這里要注意一點(diǎn),SkeletonView是遞歸的,所以如果要在所有可視化控件中顯示Skeleton,你只需要在主容器視圖中調(diào)用show方法.
好了,開始寫代碼吧
SkeletonView 兼容 UITableView 和 UICollectionView
如果想要在UITableView或UICollectionView中顯示skeleton,你需要遵守SkeletonTableViewDataSource或SkeletonCollectionViewDataSource協(xié)議
并且重寫三個(gè)方法
這三個(gè)方法跟之前的三個(gè)方法類似,第一個(gè)是返回section的數(shù)量;第二個(gè)是返回每個(gè)section的行數(shù);第三個(gè)是讓Skeleton知道cell的標(biāo)識(shí)符,例如:return "CellIdentifier"
重要柿赊!?如果您使用可調(diào)整大小的單元格(tableView.rowHeight = UITableViewAutomaticDimension)轻局,則必須定義該單元格estimatedRowHeight
實(shí)例:
maintableview.rowHeight = UITableViewAutomaticDimension
?maintableview.estimatedRowHeight = 120.0
自定義顏色
可以自定義Skeleton的顏色,有兩種,有純色跟漸變色
純色:
maintableview.showSkeleton(usingColor: UIColor.gray)
漸變色:
let gradient=SkeletonGradient(baseColor: UIColor.midnightBlue)
maintableview.showGradientSkeleton(usingGradient: gradient)
自定義動(dòng)畫
SkeletonView現(xiàn)在有兩種動(dòng)畫,一種是實(shí)心Skeleton一種是漸變滑動(dòng)Skeleton
let animation = SkeletonAnimationBuilder().makeSlidingAnimation(withDirection: .leftRight)
?let gradient = SkeletonGradient(baseColor: UIColor.midnightBlue)
?maintableview.showAnimatedGradientSkeleton(usingGradient: gradient, animation: animation)
OK!開始動(dòng)起來(lái):
maintableview.startSkeletonAnimation()
這里著重講一下我遇到的坑.我一切準(zhǔn)備就緒跑起來(lái)之后發(fā)現(xiàn)我的tableview是一坨的一片灰色在那整屏閃動(dòng),cell里面的imageview跟label都不知道去哪了,table的DataSource的三個(gè)方法也走了,我以為是上面說(shuō)的容器的問題,我就把上面的maintableview都換成了view(最最父視圖)結(jié)果并沒改變一屏幕在那閃的命運(yùn),折騰了半天才發(fā)現(xiàn),不光tableview,imageview,label要isSkeletonable = true,連cell也要isSkeletonable = true.這下子世界終于清晰了.幫大家趟了此坑.