簡(jiǎn)介
MVVM網(wǎng)上資料有很多,相信大家都有過(guò)一定了解。在這里就不再過(guò)多闡述了。
今天主要給大家分享一個(gè)很有意思的滑動(dòng)效果。詳情見(jiàn)下圖:

00.gif
實(shí)現(xiàn)方式
思路1:
當(dāng)我們看到這個(gè)效果的時(shí)候我們應(yīng)當(dāng)考慮的是
imageView和cell的frame是如何變化的。只要把這個(gè)分析好了。這個(gè)效果就不難實(shí)現(xiàn)了。我起先最初的做法是將cell上圖片的frame上下分別大于cell50的高度。然后在scrollView代理方法里添加一個(gè)通知,將獲取到的偏移量傳遞過(guò)去。從而根據(jù)偏移量改變imageView的高度去實(shí)現(xiàn)。
可惜 ,然并卵!?。?這并不是最好的方式。。。
PS:上面的這種思路已經(jīng)被我砍掉了(原諒我廢話(huà)了這么多)
思路2:
如果我們獲取到
cell在屏幕中的位置,如果我們獲取到cell在父視圖中心的位置,如果我們能根據(jù)這兩者的偏移量設(shè)置一個(gè)偏移的比例。那么我們的imageView根據(jù)設(shè)置好的偏移比例改變自身frame的高度不就完整實(shí)現(xiàn)了么!??!
關(guān)于點(diǎn)擊cell后展開(kāi)一個(gè)View只是在Model里增加了一個(gè)BOOL屬性而已,如果還有不太清楚的童鞋,文章最后會(huì)附上github鏈接!
不知道大家能不能理解,下面請(qǐng)看核心代碼:
核心代碼
- (CGFloat)cellWithOffset
{
/*
將rect由rect所在視圖轉(zhuǎn)換到目標(biāo)視圖view中,返回在目標(biāo)視圖view中的rect
這里用來(lái)獲取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è)計(jì)模式,還有很多需要學(xué)習(xí)的地方。本文目的其實(shí)是希望大家都嘗試著去學(xué)習(xí)下MVVM設(shè)計(jì)模式(大神請(qǐng)忽略),試著去了解下“陌生的”```ViewModel```
如果有哪些不對(duì)的地方,歡迎批評(píng)指正!
本文github鏈接:https://github.com/JimmyLession/JMSlideDemo.git