iPad用户界面的Twitter——它是如何工作的?

iPad用户界面的Twitter——它是如何工作的?,ipad,uinavigationcontroller,uiscrollview,navigation,Ipad,Uinavigationcontroller,Uiscrollview,Navigation,Twitter为iPad引入了一种新的内容浏览方式。有人猜测这些滑动面板是如何管理的吗?它是一个大的UIScrollView,里面有一堆UITableView?还是一堆UIViewControllers在彼此上面滑动?还是别的什么?你赌什么?我认为这里的技巧不在于使用的视图类型,而在于它们的定位和动画。当各种面板滑入滑出时,我认为它们使用的是一些类似于通过UIGestureRecognitor实现激活的CaKeyFrameanimation的东西 对于垂直滚动,他们使用的是UIScrollVie

Twitter为iPad引入了一种新的内容浏览方式。有人猜测这些滑动面板是如何管理的吗?它是一个大的
UIScrollView
,里面有一堆
UITableView
?还是一堆
UIViewControllers
在彼此上面滑动?还是别的什么?你赌什么?

我认为这里的技巧不在于使用的视图类型,而在于它们的定位和动画。当各种面板滑入滑出时,我认为它们使用的是一些类似于通过UIGestureRecognitor实现激活的CaKeyFrameanimation的东西


对于垂直滚动,他们使用的是UIScrollView,但对于水平滚动,以上是我的赌注。

据说开发人员将导航控制器展平到可滑动的面板中。但据我所知,没有其他信息


这有点道理,它基本上只是一个
UINavigationController
,你在堆栈上下移动的方式会改变。不再一次只显示一个
UIViewController
,现在可以显示多个。不过,我真的无法帮到具体的实现。

我猜:这是一个用于水平移动的
uicrollview
,主视图后面的
UIView
s由手动设置动画,具体取决于主视图的位置。
UIScrollViewDelegate
提供了许多必要的方法来制作背景动画
UIView
s.

这是一个为ipad应用程序提供类似twitter的UI的好例子

,真是太棒了

它规定:

  • 级联视图
  • 定向支撑
  • 反弹效应
使用我在GitHub上的项目,您可以轻松开发与Twitter iPad应用程序非常相似的UI。关于这件事也有一个很好的解释

如果您对它的工作原理感兴趣,只需看看代码,它是开源的;-)。基本上,它使用iOS 5中引入的
UIViewController
组合。它管理多个“层”,这些层是您提供的
UIViewController
s。层的移动由
UIPangestureRecognitor
触发,以及在何时移动哪个层的一些逻辑。它的外观和感觉都非常好,因为它支持iOS动画

FRLayeredNavigationController
的API与
UINavigationController
非常相似,因此易于使用:-)。使用FRLayeredNavigationController的我的项目中的示例:

存档:

发件人:

同时观看演示视频/屏幕截图:


值得注意的是:这条推特只是一些随机人的概念性评论,而不是开发者提供的任何信息。值得注意的是:这不是一些随机人的评论。Mike Rundle(Flyostiy)是一位非常知名和受人尊敬的iOS开发者。我相信他有理由在推特上这么说。这不是在指责他的天赋。我的意思是,他是一个外部观察者,谈论应用程序的行为,而不是一个有任何内部知识的人。而且,他再次谈到了应用程序在概念上是如何工作的(是的,它是一个沿边到边布置的导航控制器),而不是在UIKit级别上实际是如何完成的(这就是这个问题所要问的)。我很想读朗德尔关于这件事的推测!Mike Rundle所评论的是iPad twitter应用程序在概念上的作用,现在是如何实际实现的。当然,所有的表视图都是滚动视图,所以不需要魔法来实现垂直滚动。动画非常简单(向左滑动,向右滑动);我怀疑你需要关键帧动画。但水平滚动实际上相当复杂。它可能可以用手势识别器来完成,但几乎可以肯定的是,不能用普通的手势识别器来完成;我最大的问题是:水平滚动是一个UIScrollView(惯性免费!),上面有一堆疯狂的代码来实现页面停止和堆叠吗?或者Loren是从零开始实现所有这些行为的吗?是不是他们使用了修改过的UIPageControl来获得水平惯性?@Janco:UIPageControl只是一个UI元素。它不能自己做任何事情(除了响应右/左点击,但您仍然需要将其连接到控制器)。链接已断开。提供备选方案或删除帖子。我在此处找到指向github页面的链接:
[self.layeredNavigationController pushViewController:wvc inFrontOf:self maximumWidth:YES animated:YES];
InfoCategoriesViewController *icvc = [[InfoCategoriesViewController alloc] init];
FRLayeredNavigationController *lnc = [[FRLayeredNavigationController alloc] initWithRootViewController:icvc configuration:^(FRLayeredNavigationItem *item) {
    item.nextItemDistance = 49;
}];
self.window.rootViewController = lnc;
[self.window makeKeyAndVisible];