亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS仿微博導航欄動畫(CoreGraphics)的實現方法

2019-10-21 18:40:47
字體:
來源:轉載
供稿:網友

前言

昨天剛做完項目的新版本、除了嘗試一些新的架構之外、功能方面并沒什么特別的地方。

但是順手搞了一些還算好玩的東西、其一就是這個導航欄的動畫。

感覺還算簡單易懂、分享一下(其實更多是最近攢了好多封面、不貼出來憋得人難受)。

iOS,微博,導航欄,CoreGraphics

導航欄動畫.gif

思路

先介紹CA的兩個方法:

基于原始狀態的位移

CG_EXTERN CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

基于原始狀態的形變

CG_EXTERN CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

知道了這兩個方法、剩下就是如何使用形變和位移以達到想要的效果了。

這里、需要分兩部分來看、一部分是位移、一部分是形變
而且、如果將一整個動畫以及翻頁動作看成1。那么位移和形變又需要分成兩部分來看:0到0.5以及0.5到1。

其實一點都不難、畫個圖看一眼。連一元方程都不算、完全是小學算術題~甚至連奧數都算不上。

0到0.5區間內

先看形變

在0.5時、我們需要將線條長度從left_width形變成max_width

iOS,微博,導航欄,CoreGraphics

再看位移

與此同時如果想讓線條在左側看起來并沒有移動、就需要將線條的x軸一點點向右移動。這個移動的值呢?

由于形變是雙向的、右側和左側都會變長。那么對于左側最終將是中間時最終形變差值的一半。

具體到數值:

最左側到中心點時x軸的位移 = 最左側到中心點時形變的差值/2 = (max_width - left_width)/2

0.5到1區間內

依舊先看形變

和之前的形變相同

iOS,微博,導航欄,CoreGraphics
形變-0.5到1

然后來看位移

同理、如果我的長度減少了X、那么我如果想保證看起來右側位置不會改變、考慮到形變是左右同時發生、就需要向右移動X/2。

具體到數值:

中心點到最右側時x軸的位移 = 中心點到最右時形變的差值/2 = (max_width - right_width)/2

具體函數

以我項目里兩個按鈕(self.titleBtn1/self.titleBtn2)為例

if (0 <= offsetRate && offsetRate <= 0.5) {  /*   * 左側與中間相互移動   */    //x軸位移 :: 中間時位移 * 偏移比例系數  CGFloat translationOfX = _translationofX_center * offsetRate * 2;  self.line.transform = CGAffineTransformMakeTranslation(translationOfX, 0);    //x軸形變 :: 1 + (最大時相對形變) * 偏移比例系數  CGFloat flagScale = 1 + (_flagScale_center - 1) * (offsetRate * 2);  self.line.transform = CGAffineTransformScale(self.line.transform, flagScale, 1);   }else if (0.5 < offsetRate && offsetRate <= 1) {  /*   * 中間與右側相互移動   */    //x軸位移 :: 中間時位移 + 最終位移 * 偏移比例系數  CGFloat translationOfX = _translationofX_center + _translationofX_right * (offsetRate - 0.5) * 2;  self.line.transform = CGAffineTransformMakeTranslation(translationOfX, 0);    //x軸形變 :: 最大時形變 - (最大形變 - 最終形變) * 偏移比例系數  CGFloat flagScale = _flagScale_center - (_flagScale_center - _btn2Width/_btn1Width) * (offsetRate - 0.5) * 2;  self.line.transform = CGAffineTransformScale(self.line.transform, flagScale, 1); }

其中的某些參數的意義以及取值:

{ //整體最大寬度 CGFloat _maxWidth; //位于左側時寬度 CGFloat _btn1Width; //位于右側時寬度 CGFloat _btn2Width; //從左側移到中心時x軸位移 CGFloat _translationofX_center; //從中心移到右側時x軸位移 //所以總位移就是_translationofX_center+_translationofX_right CGFloat _translationofX_right; //位于中心時形變 CGFloat _flagScale_center;}{ _btn1Width = self.titleBtn1.width; _btn2Width = self.titleBtn2.width; _maxWidth = self.titleBtn2.right - self.titleBtn1.left; _translationofX_center = (_maxWidth - _btn1Width)/2; _translationofX_right = (_maxWidth - _btn2Width)/2; _flagScale_center = _maxWidth/_btn1Width; self.line.frame = CGRectMake(self.titleBtn1.left, self.height, self.titleBtn1.width, 1);}

將屏幕滑動的偏移量傳遞進來

#pragma mark UIScrollViewDelegate- (void)scrollViewDidScroll:(UIScrollView *)scrollView {  CGFloat offsetX = scrollView.contentOffset.x; CGFloat offsetRate = offsetX/BSScreen_Width;  //將偏移率傳遞給navView  [self.navView configLingWithOffsetRate:offsetRate];}

Demo

上面的例子的代碼其實都已經列出來了、沒什么再單獨傳Demo的必要。

但是畢竟開了個帖子、連個Demo都沒有不好看。于是上午干脆封裝了一個小工具出來。

但是只封裝了移動的動畫、并沒封裝按鈕變色等等一系列功能。

iOS,微博,導航欄,CoreGraphics

用起來也挺簡單的、只要將按鈕的數組、下方橫線交付、在屏幕滑動的時候把偏移量傳遞進去、就能自動工作了。寬度啊什么都會自己算:

@interface KTNavScrollTool : NSObject/** 初始化 @param titleArr 按鈕數組 @param line 需要移動的橫線 @return 實例對象 */- (instancetype)initWithTitleArr:(NSArray<UIView *> *)titleArr line:(UIView *)line;/** 移動的函數 @param offsetRate scrollview滾動式的偏移量的比例 */- (void)configLingWithOffsetRate:(CGFloat)offsetRate;@end

GitHub有興趣可以自取

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一二三视频| 久久影院在线观看| 97视频免费在线看| 在线日韩欧美视频| 日韩精品在线观看一区二区| www国产精品视频| 久久精品久久久久| 欧美成人精品在线| 中文字幕综合在线| 久久国产精品久久久久久久久久| 欧美视频在线免费看| 色爱av美腿丝袜综合粉嫩av| 美女扒开尿口让男人操亚洲视频网站| 欧美午夜激情在线| 亚洲一区二区三区视频播放| 精品爽片免费看久久| 成人免费看黄网站| 亚洲色图国产精品| 色琪琪综合男人的天堂aⅴ视频| 欧美做受高潮电影o| 欧美在线视频导航| 亚洲а∨天堂久久精品喷水| 2019中文字幕全在线观看| 亚洲天堂免费视频| 亚洲精品久久久久久久久久久久| 国内精品小视频在线观看| 久久久亚洲欧洲日产国码aⅴ| 欧美精品制服第一页| 清纯唯美日韩制服另类| 亚洲国产日韩欧美在线图片| 久久中文字幕视频| 亚洲一区制服诱惑| 国产成人在线一区| 国内精品中文字幕| 国产欧美精品一区二区三区-老狼| 国产日韩在线一区| 亲子乱一区二区三区电影| 91精品视频一区| 欧美日韩国产精品| 成人黄色短视频在线观看| 97在线视频免费| 中文在线资源观看视频网站免费不卡| 国产91精品高潮白浆喷水| 亚洲成人动漫在线播放| 精品亚洲夜色av98在线观看| 久久精品视频亚洲| 91久久中文字幕| 日韩精品日韩在线观看| 美日韩精品视频免费看| 欧美一级大胆视频| 国产精品久久久久久五月尺| 九九久久综合网站| 国产婷婷成人久久av免费高清| 国产精品一区专区欧美日韩| 久久久久五月天| 8090成年在线看片午夜| 国产啪精品视频网站| 91精品在线国产| 久久久91精品国产一区不卡| 久久久噜久噜久久综合| 国产精品免费视频久久久| 91国产美女在线观看| 亚州精品天堂中文字幕| 欧美精品久久久久久久免费观看| 日韩精品极品在线观看| 最近2019年手机中文字幕| 欧美影院成年免费版| 国产97在线视频| 欧美国产日韩一区二区在线观看| 亚洲国产日韩欧美综合久久| 欧美日本啪啪无遮挡网站| 欧美性色xo影院| 91成人天堂久久成人| 久久综合国产精品台湾中文娱乐网| 欧美与欧洲交xxxx免费观看| 中文字幕无线精品亚洲乱码一区| 国产精品九九九| 精品国产一区二区三区久久| 久久69精品久久久久久久电影好| 中文字幕精品一区二区精品| 国外色69视频在线观看| 91九色视频导航| 91成人天堂久久成人| 超碰日本道色综合久久综合| 欧美日韩激情网| 色阁综合伊人av| 亚洲在线www| 一区二区av在线| 久久影视电视剧凤归四时歌| 亚洲精品电影久久久| 激情亚洲一区二区三区四区| 狠狠躁夜夜躁久久躁别揉| 91精品在线观看视频| 亚洲欧美综合区自拍另类| 日韩在线观看精品| 欧美色视频日本版| 日韩一区二区久久久| 欧美激情在线视频二区| 亚洲影院污污.| 亚洲国产天堂久久综合网| 久久人人看视频| 高清日韩电视剧大全免费播放在线观看| 国产精品视频自拍| 久久成人精品视频| 成人午夜高潮视频| 欧美午夜精品在线| 亚洲视频免费一区| 92福利视频午夜1000合集在线观看| 国产免费一区二区三区在线观看| 亚洲午夜精品久久久久久久久久久久| 国产亚洲精品久久久久久| 中文字幕综合一区| 日韩一区二区久久久| 国产精品久久久久久亚洲影视| 亚洲一区二区三区四区在线播放| 欧美在线播放视频| 国产成人在线视频| 国产美女精品视频免费观看| 久久中文字幕国产| 国产精品jvid在线观看蜜臀| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美一级淫片aaaaaaa视频| 国产成人精品999| 精品久久久久久久久久ntr影视| 亚洲va男人天堂| 91麻豆国产语对白在线观看| 日韩欧美一区二区三区久久| 国产精品久久久久久久天堂| 久久久久久久久久久国产| 亚洲精品第一页| 欧美成人免费在线观看| 欧美一级淫片videoshd| 91精品国产91久久久久福利| 亚洲美女激情视频| 亚洲午夜精品久久久久久久久久久久| 91精品91久久久久久| 久久久久国产精品一区| 日日噜噜噜夜夜爽亚洲精品| 中文字幕国内精品| 国产拍精品一二三| 国产日韩视频在线观看| 亚洲全黄一级网站| 国自产精品手机在线观看视频| 日韩av男人的天堂| 久久久99久久精品女同性| 亚洲一区二区三区四区视频| 美女精品视频一区| 日韩欧美亚洲国产一区| 国产精品h片在线播放| 伊人久久综合97精品| 亚洲人成毛片在线播放| 亚洲天堂一区二区三区| 欧美精品videosex性欧美| 国产成人精品999| 亚洲影院色无极综合| 成人黄色av免费在线观看| 久久久日本电影| 粗暴蹂躏中文一区二区三区| 国产免费久久av| 一区二区三区无码高清视频| 57pao国产精品一区| 欧美视频免费在线| 欧美精品在线免费播放| 久久人体大胆视频|