[iOS]5 分鐘實現(xiàn)抖音 APP

首先我們來分析一下這個界面,這是個豎向滑動的 scrollView,我們可以在 scrollView 上添加 3 個 view,然后將 scrollView 滾到中間紅色 view 的位置,以后每次用戶滑動完成以后,都將 scrollView 重置到這個狀態(tài),這樣就能實現(xiàn)抖音那種無限滑動的效果。

然后,每次用戶滑動完就開始播放視頻,這樣我們就能實現(xiàn)抖音這個效果了。有了思路,接下來開始寫代碼。

-?(void)viewDidAppear:(BOOL)animated?{

????[super?viewDidAppear:animated];?self.scrollViewOffsetYOnStartDrag?=?-100;

????[self?scrollViewDidEndScrolling];

}

-?(void)viewDidDisappear:(BOOL)animated?{

????[super?viewDidDisappear:animated];

????[self.secondImageView?jp_stopPlay];

}?#pragma?mark?-?UIScrollViewDelegate?-?(void)scrollViewDidEndDragging:(UIScrollView?*)scrollView

??????????????????willDecelerate:(BOOL)decelerate?{?if?(decelerate?==?NO)?{

????????[self?scrollViewDidEndScrolling];

????}

}

-?(void)scrollViewDidEndDecelerating:(UIScrollView?*)scrollView{

????[self?scrollViewDidEndScrolling];

}

-?(void)scrollViewWillBeginDragging:(UIScrollView?*)scrollView?{?self.scrollViewOffsetYOnStartDrag?=?scrollView.contentOffset.y;

}?#pragma?mark?-?JPVideoPlayerDelegate?-?(BOOL)shouldShowBlackBackgroundBeforePlaybackStart?{?return?YES;

}?#pragma?mark?-?Private?-?(void)scrollViewDidEndScrolling?{?if(self.scrollViewOffsetYOnStartDrag?==?self.scrollView.contentOffset.y){?return;

????}?CGSize?referenceSize?=?UIScreen.mainScreen.bounds.size;

????[self.scrollView?setContentOffset:CGPointMake(0,?referenceSize.height)?animated:NO];

}

-?(NSURL?*)fetchDouyinURL?{?if(self.currentVideoIndex?==?(self.douyinVideoStrings.count?-?1)){?self.currentVideoIndex?=?0;

????}?NSURL?*url?=?[NSURL?URLWithString:self.douyinVideoStrings[self.currentVideoIndex]];?self.currentVideoIndex++;?return?url;

}

代碼寫到這里就能實現(xiàn)無限滑動的效果了,這很簡單,對吧?

那如何播放視頻呢?我們應該引入AVFoundation,然后實例化AVPlayer,然后創(chuàng)建視頻圖層,然后監(jiān)聽視頻播放狀態(tài),再開始播放視頻。這只是一部分,接下來開始監(jiān)聽播放器的視頻進度變化,開始定制播放進度指示器。然后還要處理音頻的輸出問題,還要處理前后臺事件……

像抖音這樣好的用戶體驗,視頻數(shù)據(jù)都是邊下邊播緩存在本地的,那如何實現(xiàn)基于AVPlayer的邊下邊播技術呢?

問題似乎沒有那么簡單,這樣算下來,5 分鐘絕對寫不完。

這時就輪到視頻利器JPVideoPlayer上場了。只要下面一行代碼,上面所有的事情全部幫你搞定,信不信?不信就試試看。

[self.secondImageView?jp_playVideoMuteWithURL:[self?fetchDouyinURL]

???????????????????????????????bufferingIndicator:nil?progressView:[JPDouyinProgressView?new]

??????????????????????????configurationCompletion:^(UIView?*view,?JPVideoPlayerModel?*playerModel)?{

??????????????????????????????view.jp_muted?=?NO;

??????????????????????????}];

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • { 11、核心動畫 需要簽協(xié)議,但是系統(tǒng)幫簽好 一、CABasicAnimation 1、創(chuàng)建基礎動畫對象 CAB...
    CYC666閱讀 1,704評論 2 4
  • 一、簡介 <<繼承關系:UIScrollView --> UIView-->UIResponder-->NSObj...
    無邪8閱讀 2,083評論 0 0
  • 準確的說 這個習慣就是寫作。我說過我要把它當成像是吃飯睡覺一樣 作為一個日常事務去運作。 畢竟寫作是一輩子的事情 ...
    Chris的另一個世界閱讀 161評論 0 1
  • 很多情況下,一下輸入框需要按照要求進行輸入,輸入內(nèi)容由開發(fā)人員來指定。例如:密碼輸入框只能輸入純數(shù)字或者是拼音與數(shù)...
    見哥哥長高了閱讀 1,575評論 0 2
  • 手工素陶;出窯展姿。 低斂回味;厚實圓閏。 孤品, 壹窯二套, 覓知音…… ——拙撲/手制 手機拍攝,未加處理,原...
    木一同志閱讀 503評論 1 1

友情鏈接更多精彩內(nèi)容