Closed xhzengAIB closed 10 years ago
@xhzengAIB 我看了一下网易新闻,觉得这个框架不复杂啊。我给你简单的说几个关键的实现步骤吧:
1.继承一个UIViewController
,命名为NetEaseContainerController
,用它来做N个子viewController
的容器。
for (UIViewController *viewController in _viewControllers)
{
[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];
}
2.把一个UIScrollView
加到NetEaseContainerController
的view
上,然后依次把所有的子viewController
的view
都加到这个UIScrollView
上。
3.自定义一个UIGestureRecognizer
,加到UIScrollView
上,这个UIGestureRecognizer
只有在UIScrollView
的contentOffset.x
小于等于0或大于等于contentSize.width
- bounds.bounds.size.width
的时候才去响应, 你可以在触发这个手势的方法里去唤起sideBar
(网易新闻这一点上做得有点糙,他们是在contetOffset.x
满足这个条件的情况下,下次手势才会触发sideBar
)。
具体我就不去实现了。
No other issues, closed.
@cyndibaby905 你好!其实不是这样的,因为需要响应ViewDidApear will等等,你说的那个会直接相应全部ViewController的,并且没有重用ViewController,所以效率不高,如果新闻的分类超过1W个,我是假如这样,内存就会发生很大的改变,导致carsh,如果您没空,那我就不破解吧!我个人技术做不到网易那样的体验和机制。谢谢你的回答 Jack
@xhzengAIB 如果你要响应viewDidAppear
之类的话,那就不需要把全部的子viewController
的view
加进去,只加对应当前UIScrollView
的contentOffset.x
的viewController
和左右两个view
就可以了,在滚动的时候再去addSubview
和removeSubview
。只要设好了parentViewController
和childViewController
的对应关系,addSubview
和removeSubview
这两个方法会唤起响应子viewController
的viewDidAppear
和viewWillAppear
方法的。
建议看一下 https://github.com/hollance/MHTabBarController 的实现
@cyndibaby905 这其中的机制,我始终还是不太明白,希望您能带带我呗!毕竟你是新浪的开发者,经验比我好上一百倍,自己摸索真的有点难度。
@cyndibaby905 您好!您真的抽不出时间来教教我嘛?我很想跟你学习哇! Jack
@cyndibaby905 您好! 您好!你有兴趣破解网易新闻的主页框架嘛?细节有一下几个: 1、重用了tableView(三个tableView重用嵌套在一个水平滑动的UIScrollView中,实现无数TableView内容页的水平滑动) 2、快速滑动只显示logo,而不显示tableVIew(水平滑动UIScrollView的时候,tableView不会显示,因为这样能提高用户的快速滑动的体验) 3、并且很好的把pangesture传递给下一个接收gesture的响应者(因为网易新闻还有另外一个框架就是左右侧滑,是通过手势来控制的,所以两者有出冲突,左右侧滑的手势接受方法需要在UIScrollView本身的pangesture传递过来,才能完成侧滑效果)
我看了您很多的作品,你对UIScrollView这个控件非常熟悉,而且很精通,希望能得到您的帮助和支持。谢谢!
这是我的个人github地址:https://github.com/xhzengAIB、https://github.com/JackTeam ,我主要是为了开源多一点组件,帮助我们苦逼的程序员,而且能有向您多学习的机会。
Jack