今天看了下別人寫的抽屜效果源碼,恩...簡單來說非常繁雜,手勢+計算寫了很長代碼,大概像下面這樣,總共寫了兩百多行...
然后我就尷尬了...難道抽屜效果真的有這么復(fù)雜嗎?
所謂抽屜效果,一般都是左滑或右滑出現(xiàn)新視圖,然后對原有視圖做點位移或者縮放動畫.個人感覺Scrollerview很契合這個屬性,那么就讓我們動手試試看吧
實現(xiàn)思路
1.首先, Scrollerkview自帶滾動這樣就解決了滑動手勢的問題.
2.其次,我們知道Scrollerview有個contentOffset的屬性可以用來設(shè)置當(dāng)前顯示的x和y的位置,可以利用這個屬性來做點文章
3.利用子view的transform屬性,輕松實現(xiàn)縮放效果
總體布局大致如下:
具體實現(xiàn)
1.按照界面架構(gòu)圖添加對應(yīng)的View并設(shè)置offset
2.在scrollViewDidScroll代理方法中設(shè)置漸變大小
比如:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat xy = scrollView.contentOffset.x/_leftView.frame.size.width; _rightView.transform = CGAffineTransformMakeScale(0.75+0.25*xy,0.75+0.25*xy); }
0.75表示最終縮放比例(也就是完全滑動結(jié)束后的縮放比例)
0.25表示受滑動影響的比例(和最終比例之和為1.0)
兩行代碼解決!
很給力有木有!
最后,我們加上一個復(fù)位點,如果滑動進行到一半時松開,利用動畫進行還原
if (scrollView.contentOffset.x < leftViewWidth*0.5) { [UIView animateWithDuration:0.3 animations:^{ scrollView.contentOffset = CGPointMake(0, 0); }]; } else { [UIView animateWithDuration:0.3 animations:^{ scrollView.contentOffset = CGPointMake(leftViewWidth, 0); }]; }
寫作不易,如果這篇文章幫助到了你,不妨點個喜歡吧~
最后附上Demo地址:
https://github.com/WeiTChen/DrawerAnimation