2518528-2a04a8d78e808d81.gif
這個(gè)布局困擾了我好幾天缭付,因?yàn)橐麄€(gè)屏幕滑動(dòng)柿估,并且三個(gè)collectionView要能夠左右滑動(dòng),點(diǎn)擊切換陷猫。
說到底還是基礎(chǔ)知識(shí)不太好秫舌,對(duì)scrollview的使用不是特別深入。
最后這個(gè)視圖我用到了PageViewController來控制三個(gè)子控制器绣檬,整個(gè)的界面是一個(gè)UIscrollView
視圖的切換按鈕需要自己自定義足陨。并且和子控制器建立關(guān)聯(lián)。
其中處理滑動(dòng)問題上我用了通知娇未。因?yàn)樽涌刂破骱透缚刂破魇莾蓚€(gè)控制器墨缘,我感覺用通知比較方便。
在第三個(gè)子控制器上滑動(dòng)方法上寫個(gè)通知零抬,當(dāng)向上滑動(dòng)镊讼,或者向下滑動(dòng)時(shí),讓父控制器中的scrollview的contentOffset進(jìn)行改變平夜,從而達(dá)到整體滑動(dòng)的效果蝶棋。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat y = scrollView.contentOffset.y;
NSLog(@"%f",y);
//通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"scrollViewThree" object:nil userInfo:@{@"y":@(scrollView.contentOffset.y)}];
}
在父控制器的viewdidload中接收。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(threeVC:) name:@"scrollViewThree" object:nil];
//通知
- (void)threeVC:(NSNotification *)not
{
if ([not.userInfo[@"y"] floatValue] <= 0) {
[self.scrollView setContentOffset:CGPointMake(0, -64)];
} else {
if ([not.userInfo[@"y"] floatValue] > 240) {
return;
} else {
[self.scrollView setContentOffset:CGPointMake(0, [not.userInfo[@"y"] floatValue])];
}
}
}
最后再移除
//刪除通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"scrollViewThree" object:nil];
}
這樣整體就完成了忽妒。
另一種方式: 利用父子控制器來管理具體代碼在這里->demo