為了做到這個效果沒少走彎路酥泛,之前一直使用
TableViewHeaderView
來做這個月趟,嘗試了半天,結(jié)果不行撇簿。后來去看百度中一張的下拉放大怎么實現(xiàn)的聂渊。看到別人使用contentInsert....
哎四瘫、恍然大悟!
寫完后才發(fā)現(xiàn)汉嗽,原來并不是想象的那么難嘛!下面說幾個注意的點找蜜。當(dāng)然饼暑,我已經(jīng)封裝好了。你只需要不多的代碼就能搞定啦!有興趣的朋友去我的
Git
去下載DEMO就行啦,喜歡給個Star~
首先弓叛,想要下拉縮放上面的輪播圖彰居,你得把滑動的Offset傳給輪播圖。
//告訴dragView表格滑動了
CGFloat offset = scrollView.contentOffset.y + kHeaderHeight;
[self.dragView dragViewWithOffset:offset];
我們進(jìn)入這個方法看下做了怎么樣的處理
#pragma mark -- 滾動偏移量
- (void)dragViewWithOffset:(CGFloat)offset {
if (offset < 0) {
NSDictionary *dic = @{@"offset" : [NSString stringWithFormat:@"%f",offset]};
[[NSNotificationCenter defaultCenter] postNotificationName:@"changeSize" object:nil userInfo:dic];
//更新layout
CGSize size = self.layout.itemSize;
size.height = self.initHeight - offset ;
self.layout.itemSize = size;
//更新self
self.height = self.initHeight;
self.y = 0;
self.height = self.initHeight - offset;
}else {
self.y = 0;
CGFloat minOffset = self.height;
self.y = minOffset > offset ? - offset : - minOffset;
}
self.collectionView.height = self.height;
self.pageControl.y = self.height - kPageControH;
}
根據(jù)偏移量修改輪播圖的height
撰筷。當(dāng)偏移量<0的時候陈惰,也就是向上拖表格,這時候輪播圖的Cell
大小不再合適當(dāng)前視圖毕籽。發(fā)個消息告訴cell
抬闯。改變imageView
的size
#pragma mark -- set methed
- (void)setImageURL:(NSString *)imageURL {
NSURL *dataUrl = [NSURL URLWithString:imageURL];
[self.imageView sd_setImageWithURL:dataUrl placeholderImage:[UIImage imageNamed:@"pageOther.png"]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(zoomScale:) name:@"changeSize" object:nil];
}
- (void)zoomScale:(NSNotification *)notification {
NSDictionary *dic = notification.userInfo;
CGFloat offset = [dic[@"offset"] floatValue];
self.imageView.size = CGSizeMake(self.width, self.height - offset);
}
在設(shè)置圖片URL
的時候,正好為每個cell
都注冊一個通知关筒。接到這個通知修改size
画髓。這樣就做到了。輪播圖和cell
內(nèi)容都是一樣大小的了平委。
至于輪播圖的實現(xiàn)我就不多說了奈虾。
另外,我加入了定時器廉赔,自動滾動肉微,為了方便解決循環(huán)引用我使用了HWWeakTimer三方。代碼很少蜡塌,但是效果不錯也很方便碉纳。
關(guān)于導(dǎo)航欄和狀態(tài)欄的動態(tài)顯示問題,原本我自己寫了一套馏艾,是放在輪播圖中的劳曹,但是我覺得放進(jìn)去不好,耦合性差琅摩,如果有人不想改铁孵,也許就得修改我的代碼了。因此我拆到外面了房资,修改為使用GKFadeNavigationController這個三方蜕劝。你只需要繼承他的導(dǎo)航控制器,再寫一些代碼就行了轰异。(我的Demo
就是在故事版中繼承了這個控制器)
更新日志: iOS 11適配
以上講解代碼均在iOS 11之前版本岖沛,11之后我對其進(jìn)行了重構(gòu),使用約束控制放大縮小搭独。這里不再做講解婴削,感興趣的下載上面提供的Demo自行查看即可。
iOS技術(shù)交流群:511860085
歡迎加入牙肝!