目录
- 仿淘宝上拉进入详情页
- 系统的图像滤镜使用
- 万花筒
- 简单的仿简书个人详情页的上拉菜单
仿淘宝上拉进入详情页
仿淘宝上拉进入详情页git链接
gif:
仿淘宝上拉进入详情页.gif
系统的图像滤镜使用
系统的图像滤镜使用git链接
gif:
系统的图像滤镜使用.gif
万花筒
万花筒git链接
gif:
万花筒.gif
简单的仿简书个人详情页的上拉菜单
gif:
简单的仿简书个人详情页的上拉菜单.gif
因为实在简单,就不上传git了。这里简单说下吧:
上面一个View,中间一个View,下面一个tableView,都放在一个scrollView上
通过对tableView的contentOffset监听,如果向下滚动而scrollView没有滚动到midView显示在左上角,就让scrollView去滚动。方法是禁止tableView的滚动与交互。
通过对scrollView的contentOffset监听,如果scrollView滚动到midView显示在左上角,就让tableView允许交互与滚动。
核心代码:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
//滚动的是tableView而不是scrollView
if (object == _botTableView) {
CGFloat contentOffsetY = [change[@"new"] CGPointValue].y;
if (_scrollView.contentOffset.y < _topView.frame.size.height) {
//禁止tableView滚动与交互
_botTableView.userInteractionEnabled = NO;
_botTableView.scrollEnabled = NO;
}else {
//如果scrollView滚过头了,就重新设置一下偏移值
if (_scrollView.contentOffset.y > _topView.frame.size.height) {
[_scrollView setContentOffset:CGPointMake(0, _topView.frame.size.height)];
}
//如果tableView上滚到头了还在滚,就让scrollView滚动
if (_botTableView.contentOffset.y < 0) {
[_scrollView setContentOffset:CGPointMake(0, contentOffsetY) animated:NO];
}
}
}else if (object == _scrollView){
//如果滚动到midView显示在左上角时,就让tableView去滚动
if (_scrollView.contentOffset.y >= _topView.frame.size.height) {
_botTableView.userInteractionEnabled = YES;
_botTableView.scrollEnabled = YES;
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}