有錢人捧個(gè)錢場,沒錢捧個(gè)人場,看一看。
在寫這個(gè)demo以前覺得轉(zhuǎn)場動畫就像女神,離我很遠(yuǎn),日常項(xiàng)目根本接觸不到。畢竟系統(tǒng)自帶的就好用,身體輕,容易推倒。但是好的動畫效果就像電影彩蛋,不經(jīng)意間給用戶一個(gè)驚喜,這對App拉新傳播很有幫助。而且程序員寫完之后,不僅可以在測試女神面前展示自己的操作,還可以讓老板在投資人面前炫耀自己的團(tuán)隊(duì)質(zhì)量,吸引更多的資金,從而在彎道超車,讓自己升職加薪,達(dá)到人生
中國有很多公司在互動方面做得很好,比如騰訊和字節(jié)跳動。demo主要是寫AppStore所以我研究了跳轉(zhuǎn)和抖音評論【AppStore】、【抖音】、【QQ這三種產(chǎn)品:音樂。
接下來,我簡潔全面,就樣demo在實(shí)現(xiàn)過程中,產(chǎn)品相互比較,對比問題進(jìn)行描述。
轉(zhuǎn)場動畫主要由轉(zhuǎn)場動畫、跳轉(zhuǎn)協(xié)議、手勢交互三部分組成。
轉(zhuǎn)場動畫是對動畫效果的代碼描述,并遵守UIViewControllerAni ** tedTransitioning協(xié)議。
跳轉(zhuǎn)協(xié)議在push,press等協(xié)議的相關(guān)方法里,返回動畫對象。
手勢交互是用手勢來控制動畫的進(jìn)度,通常是建立的UIPercentDrivenInteractiveTransition的子類。
這里我就不描述轉(zhuǎn)場動畫的基本概念了,網(wǎng)上有很多相關(guān)資料。
AppStore主頁的動畫主頁分為這些部分。
長按,視圖縮小,松開后,視圖擴(kuò)展到下一個(gè)界面,具有輕微的彈簧效果。
點(diǎn)擊,縮小視圖,松開后,將視圖擴(kuò)展到下一個(gè)界面,并具有輕微的彈簧效果。
長按后滑動,先縮小視圖,再恢復(fù)原狀。
這里直接用我UIButton處理這些手勢,touchesBegan處理視圖縮小,touchesEnded點(diǎn)擊回調(diào)處理。所以這里加了一個(gè)。bool屬性endTouchesBegan用于判斷視圖是否已縮小。如果縮小,直接回調(diào),如果沒有,則先進(jìn)行縮小載回調(diào)。
AppStore動畫第一界面statusBar為顯示,第二個(gè)界面隱藏,第三個(gè)界面恢復(fù)顯示。我們使用它bool屬性hideStatus判斷顯示隱藏。
第一個(gè)界面,默認(rèn)self.hideStatus =NO,顯示。點(diǎn)擊圖片時(shí),調(diào)用strongSelf.hideStatus =YES隱藏;這樣做的目的是通過第二個(gè)界面pop回來時(shí),statusBar先隱藏,然后采用以下方法進(jìn)行statusBar動畫顯示。
同樣,第二個(gè)界面也是如此,但第二個(gè)界面不知道push進(jìn)去還是pop所以增加了push屬性。
tabBar開始想用動畫hidesBottomBarWhenPushed隱藏,但和AppStore轉(zhuǎn)場動畫不太合適,就像AppStore的tabBar的動畫在UINavigationControllerDelegate處理協(xié)議方法。
AppStore轉(zhuǎn)場pop手勢的上下滑動與抖音評論的效果非常相似,但下,AppStore頁面還增加了左滑pop手勢。
一開始,我想用蘋果自己的邊緣手勢UIScreenEdgePanGestureRecognizer來進(jìn)行處理,但發(fā)現(xiàn)這樣只能解決橫向側(cè)滑pop,垂直滑動無法解決pop的問題。干脆自己寫一套手勢,可以橫向豎向支撐。橫向滑動還支持全屏、半屏等距離屬性的設(shè)置,寫全局宏TLPanEdgeInside來控制。
自認(rèn)比較手勢處理AppStore評論抖音的效果很好。因?yàn)椴还茉鯓覣ppStore或者抖音評論只能改變上下方向之一,或者改變UIScrollView要么改變控制器的偏移量pop進(jìn)度。我包裝的這套手勢可以自由上下改變,可以監(jiān)控開始的手勢,從上下滑動到左右滑動,或者基于上下。
因?yàn)閜ush轉(zhuǎn)場時(shí)間為0.8秒,我在第一個(gè)控制器中添加了以下內(nèi)容userEnabled屬性用于防止重復(fù)點(diǎn)擊。demo的代碼。
AppStore轉(zhuǎn)移主要涉及三種方法:
-(NSArray*_Nonnull)tl_transitionUIViewFrameViews;
-(NSString *_Nonnull)tl_transitionUIViewI ** ge;
-(void)setContainScrollView:(UIScrollView *)scrollView isPush:(BOOL)isPush;
第一種方法是回調(diào)前一個(gè)視圖和后一個(gè)視圖中的動畫控件。
二是圖片資源的回調(diào)。
三是防止手勢沖突,避免沖突UIScrollView視圖進(jìn)入。
導(dǎo)航欄隱藏的判斷是在UINavigationControllerDelegate協(xié)議中判斷,但考慮到項(xiàng)目中的一些頁面并非所有頁面都需要轉(zhuǎn)移動畫,因此UINavigationControllerDelegate協(xié)議在兩個(gè)地方重寫。并且還在UIViewController在分類中重寫viewWillAppear判斷方便常規(guī)push和轉(zhuǎn)場push自由切換。
處理抖音評論手勢和AppStore的一模一樣。只不過AppStore是push,抖音評論是press。
這里的鏈接和抖音完全一樣,DouYinComment。這個(gè)demo是基于視圖層級彈窗,而我寫的是彈出控制器。
同時(shí),為了避免快速掃描引起的閃光,我在手勢結(jié)束時(shí)做出了判斷。當(dāng)速度過快,掃描距離過短時(shí),直接進(jìn)行pop或者di ** iss。
研究轉(zhuǎn)場動畫時(shí)要注意QQ音樂界面有一個(gè)小問題,就是當(dāng)加藤鷹手速上下滑動時(shí),界面和頂部之間的間隙會越來越大。應(yīng)該是手勢和界面偏移之間的問題。
這種效果很好看,處理起來也很簡單。只需將相應(yīng)的控制器傳輸?shù)睫D(zhuǎn)移動畫中即可。圖片瀏覽功能也可以這樣包裝。
這也很簡單,但通常用于沒有導(dǎo)航欄的界面,否則看起來會很丑。
因?yàn)橐恍┬』锇樘嶙h模仿AppStore在動畫中,當(dāng)我點(diǎn)擊X時(shí),過渡點(diǎn)不自然,我優(yōu)化了一些代碼,具體參考TLAni ** tionAppStoreStyle文件。
同時(shí)對AppStore動畫里面的statusBar部分和tabBar進(jìn)一步處理了部分。
、
- 深圳MG動畫領(lǐng)跑中國動畫行業(yè),發(fā)揮出其創(chuàng)造力和想象力 2025/07/04
- 深圳三維動畫設(shè)計(jì)必將邁入一個(gè)更高、更加精彩的新領(lǐng)域 2025/07/03
- 深圳工業(yè)動畫制作崛起,為數(shù)字文化創(chuàng)新注入了強(qiáng)大的動力 2025/07/02
- 深圳三維動畫企業(yè)未來發(fā)展前景必將充滿無限可能 2025/07/01
- Flash動畫制作是什么? 2025/06/30
- 深圳動畫視頻制作公司簡介 2025/06/29
- 深圳MG動畫制作的發(fā)展歷程及其在行業(yè)內(nèi)的角色 2025/06/28
- 深圳MG動畫制作公司簡介 2025/06/27
- 深圳三維動畫制作助推中國數(shù)字創(chuàng)意產(chǎn)業(yè)發(fā)展 2025/06/26
- 深圳產(chǎn)品三維動畫制作是一個(gè)必不可少的宣傳手段 2025/06/25