前言:
簡(jiǎn)簡(jiǎn)單單的一個(gè)視覺(jué)差異效果霹琼,可以讓普通的Cell看起來(lái)生動(dòng)了不少枣申。我把這個(gè)效果想象成可以透過(guò)多個(gè)窗口看到圖片看杭,所以起了Ommateum這個(gè)名字。
Github下載地址 - QWOmmateumEffect
效果圖:
當(dāng)tableView滾動(dòng)模孩,Cell的圖片也會(huì)滾動(dòng)
Ommateum效果實(shí)現(xiàn):
cell里的宏
// scrollView的滾動(dòng)系數(shù)
#define kRATIO kSCROLLVIEWHIGHT*0.5/kSCREENHEIGHT/kSCREENHEIGHT
#define kSCREENWIDTH [UIScreen mainScreen].bounds.size.width
#define kSCREENHEIGHT [UIScreen mainScreen].bounds.size.height
#define kSCROLLVIEWHIGHT 200
cell里的滾動(dòng)方法:
- (void)startCellOmmateumEffect:(UIView *)view {
// 將cell的frame轉(zhuǎn)換成view的Frame(為了獲取每個(gè)cell的Y值計(jì)算應(yīng)當(dāng)滾動(dòng)多少)
CGRect rect = [self.superview.superview convertRect:self.frame toView:view];
// tableView往上滑動(dòng)時(shí),當(dāng)cell即將完全移出屏幕介却,這個(gè)時(shí)候cell還在可見(jiàn)區(qū)域內(nèi)块茁,而它的Y值是最大的負(fù)數(shù),也就 是說(shuō)負(fù)多少和正多少scrollView滾動(dòng)距離都是一樣的永淌,這里是按照tableView的height+一個(gè)cell的height這個(gè)范圍來(lái)計(jì)算佩耳,所以這里加上一個(gè)cell的高度(如果不理解可以去掉kSCROLLVIEWHIGHT往上滑動(dòng)看效果)
CGFloat originY = rect.origin.y + kSCROLLVIEWHIGHT;
_scrollView.contentOffset = CGPointMake(0, originY*originY*kRATIO + kSCROLLVIEWHIGHT*0.5);
}
當(dāng)tableView滾動(dòng)時(shí)在代理方法scrollViewDidScroll:中去遍歷當(dāng)前可見(jiàn)的所有cell,執(zhí)行他們的滾動(dòng)方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
for (QWOmmateumEffectCell *cell in [_tableview visibleCells]) {
[cell startCellOmmateumEffect:self.view];
}
}
一上來(lái)加載tableView時(shí)并沒(méi)有滾動(dòng)到相應(yīng)的位置李滴,需要手動(dòng)去讓它滾一次:
dispatch_async(dispatch_get_main_queue(), ^{
[self scrollViewDidScroll:[[UIScrollView alloc] init]];
});
這個(gè)demo我是參照了判若兩人丶 的蛮瞄,計(jì)算的方式有區(qū)別,大體思路是一樣的包竹,可以下載我的demo看下籍凝。
感覺(jué)對(duì)自己有幫助請(qǐng)給個(gè)贊,歡迎小伙伴們留言指出不足饵蒂!