簡介
MVVM網(wǎng)上資料有很多,相信大家都有過一定了解圆米。在這里就不再過多闡述了吊输。
今天主要給大家分享一個很有意思的滑動效果。詳情見下圖:
實現(xiàn)方式
思路1:
當(dāng)我們看到這個效果的時候我們應(yīng)當(dāng)考慮的是
imageView
和cell
的frame是如何變化的激率。只要把這個分析好了咳燕。這個效果就不難實現(xiàn)了。我起先最初的做法是將cell
上圖片的frame
上下分別大于cell
50的高度乒躺。然后在scrollView
代理方法里添加一個通知招盲,將獲取到的偏移量傳遞過去。從而根據(jù)偏移量改變imageView
的高度去實現(xiàn)嘉冒。
可惜 曹货,然并卵E胤薄!控乾! 這并不是最好的方式么介。。蜕衡。
PS:上面的這種思路已經(jīng)被我砍掉了(原諒我廢話了這么多)
思路2:
如果我們獲取到
cell
在屏幕中的位置壤短,如果我們獲取到cell
在父視圖中心的位置,如果我們能根據(jù)這兩者的偏移量設(shè)置一個偏移的比例。那么我們的imageView
根據(jù)設(shè)置好的偏移比例改變自身frame
的高度不就完整實現(xiàn)了么?隆>酶!
關(guān)于點擊cell
后展開一個View
只是在Model
里增加了一個BOOL
屬性而已镰吆,如果還有不太清楚的童鞋帘撰,文章最后會附上github鏈接!
不知道大家能不能理解万皿,下面請看核心代碼:
核心代碼
- (CGFloat)cellWithOffset
{
/*
將rect由rect所在視圖轉(zhuǎn)換到目標(biāo)視圖view中摧找,返回在目標(biāo)視圖view中的rect
這里用來獲取self在window上的位置
*/
CGRect toWindow = [self convertRect:self.bounds toView:self.window];
//獲取父視圖的中心
CGPoint windowCenter = self.superview.center;
//cell在y軸上的偏移 CGRectGetMidY 獲取中心Y值
CGFloat cellOffsetY = CGRectGetMidY(toWindow) - windowCenter.y;
//位移比例
CGFloat offsetScale = 2 * cellOffsetY / self.superview.frame.size.height ;
//要補(bǔ)償?shù)钠? CGFloat offset = -offsetScale * kScreenWidth * 0.1;
//讓pictureViewY軸方向偏移offset
CGAffineTransform transY = CGAffineTransformMakeTranslation(0,offset);
//給imageView的transfrom賦值
self.pictureView.transform = transY;
return offset;
}```
#最后
本人也是初學(xué)MVVM設(shè)計模式,還有很多需要學(xué)習(xí)的地方牢硅。本文目的其實是希望大家都嘗試著去學(xué)習(xí)下MVVM設(shè)計模式(大神請忽略)蹬耘,試著去了解下“陌生的”```ViewModel```
如果有哪些不對的地方,歡迎批評指正减余!
本文github鏈接:https://github.com/JimmyLession/JMSlideDemo.git