前言
昨天晚上一個簡友簡信
我,問我鹹魚
最新版的新特性動畫有沒有什麼思路. 原諒 我都沒怎麼用過鹹魚
, 再加上已經四點多了,就跟他胡謅了一下思路.
今天廣州
一如既往的是大雨傾盆, 想起昨晚的事, 就下載了一下鹹魚
的最新版, 看了一下新特性
, 感覺還是蠻炫酷
的. 腦中想了幾組動畫, 準備自己寫一下, 隨後拿到了鹹魚
的所有資源, 然後我就發現, 我想多了, 他們的做法更方便…
效果圖
github下載地址
OC版和swift版都在這一個地址:
如果對你有些許幫助, 請star, 有什麼疑問記得給我留言
友情連結
Swift版 iOS高仿完整版唯美植物系專案實戰, 點選進行跳轉
思路
最初拿到鹹魚
的所有資源的時候, 我是拒絕的, 因為我第一眼看到的就是4個新特性
視訊檔案, 雖然有想到過可能是和UBer
一樣用的是視訊, 但是證實了之後, 還是有點小吃驚. 此處, 大神毋鄙視…
隨後翻了一下鹹魚
的所有圖片資源, 隨帶找出了視訊的封面
圖片…
① 整體的新特性模組, 我的做法是一個UICollectionViewController
+ UIPageControl
, 這個應該是毋庸置疑的了…
② 重點在於UICollectionViewCell
. 播放本地視訊, 我使用的是MediaPlayer
框架裡面的MPMoviePlayerController
. 步驟: 先建一個MPMoviePlayerController
的物件
上., 然後把它的
view新增到
UICollectionViewCell 的
contentView上. 然後再先建一個封面圖片
UIImageView, 新增到
MPMoviePlayerController 的
view
③ 我們需要在UICollectionViewCell
監聽MPMoviePlayerLoadStateDidChangeNotification
和MPMoviePlayerPlaybackDidFinishNotification
.
在MPMoviePlayerLoadStateDidChangeNotification
監聽方法中, 當MPMoviePlayerController
的loadState
等於PlaythroughOK
的時候,我們需要將封面圖片的hidden設定成true.
tip:此處不能直接removeFromSuperview
, 不然會有閃爍的效果.
剛好也利用了UICollectionViewCell
的重用特性, 因為我們載入過一次視訊後, 就不再需要用封面圖片了.
在MPMoviePlayerPlaybackDidFinishNotification
的監聽方法中, 判斷當前的UICollectionViewCell
是否被選擇了, 如果使用者點選(選中)了當前的cell
且當前cell
是最後一個cell
, 我們才會進行跳轉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
private lazy var moviePlayer : MPMoviePlayerController = { let player = MPMoviePlayerController() player.view.frame = self.contentView.bounds // 設定自動播放 player.shouldAutoplay = true // 設定源型別 player.movieSourceType = .File // 取消下面的控制檢視: 快進/暫停等... player.controlStyle = .None NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NewFeatureCell.loadStatus), name: MPMoviePlayerLoadStateDidChangeNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NewFeatureCell.playFinished), name: MPMoviePlayerPlaybackDidFinishNotification, object: nil) return player }() // MARK: - private method func loadStatus() { // 將要自動播放 if moviePlayer.loadState == .PlaythroughOK { imageView.hidden = true moviePlayer.play() } } func playFinished() { NSNotificationCenter.defaultCenter().postNotificationName(PlayFinishedNotify, object: nil) } |
用法
我對這個小Demo進行了一些簡單的封裝, 不管是OC
還是Swift
, 下載之後, 直接將NewFeature
資料夾拖進您的專案中
OC用法:
1 |
#import "NewFeatureViewController.h" |
1 2 3 |
NewFeatureViewController *newFeatureVC = [[NewFeatureViewController alloc] init]; NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i |
Swift用法
1 2 3 4 |
// 配置本地視訊路徑和視訊的封面圖片 var paths = [String]() var images = [UIImage]() for i in 0.. |