在Facebook应用中,当您使用Feed时,点按照片进行查看,会发生以下情况:
图像动画/移动到屏幕中心,无论它在桌面视图中的当前位置(中间,部分偏离屏幕朝向底部,顶部,等等)
当图像移动到屏幕中心时,表格视图的其余部分淡出(alpha = 0)
向上或向下拖动图像时,表格视图的alpha值会按比例(我认为)恢复到图像偏离屏幕中心的位置
此时您会注意到,在Feed中,以前图片所在的位置现在为空(给您的印象是您'将图像放在前面)。你可以通过向上/向下拖动图像看到这一点,你可以在图像后面看到Feed / table视图。
在#2之后,如果图像已经成比例(也就是说,Feed / table视图中的图像预览是按比例缩放的,没有任何裁剪),那么它只是移动到中心。如果图像完全被裁剪(因为它太高,等等以适当地适合Feed),那么图像的其余部分会在移动到屏幕中心的同时显示。
< / LI>图像移动到屏幕中央后,图库视图控制器元素会显示(完成按钮,喜欢/评论按钮等)
在#4之后,如果您滑动到另一个图像(在全屏图像视图中向左/向右滑动到同一个相册中的另一个图像),然后尝试在#3中向上/向下拖动,我会看到第一张图片回到Feed中的位置。
最后,如果您向上/向下拖动图像超过某个阈值,它将被解除并再次显示Feed。
这就是我认为在概念上发生的事情,如果这是正确的做法我会想要一些确认(下面这些子弹不会映射到上面的子弹):
当用户点击图像时,将该imageView添加为表视图容器视图的子视图,但将其添加到完全相同的位置,以便将imageView从单元格移动到主视图中看到。
然后将该图像的移动设置为屏幕中心的动画。同时,减少表格视图的alpha值,使其在imageView到达屏幕中心的同时达到0。
一旦图像到达屏幕中心,按下模态视图控制器而不动画,并将imageView添加为模态视图控制器视图的子视图(上面的效果#6)
任何拖动图像都会降低模态视图控制器的alpha值并增加Feed表视图的alpha值(上面的效果#3)并拖动到某个阈值以上会触发隐藏图库并显示再次喂食(上面的效果#8)
问题:
我走在正确的轨道上吗?如果是这样,我如何将imageView从单元格带入前视图 - 并将其保持在同一位置?
当您滑动到另一张图像时,原始图像会“恢复”到表格视图单元格中的原始位置。这实际上只是将一个imageView从一个视图移动到下一个视图吗?如何将它发送回原始单元格 - 当用户点击图像时保留指向该单元格的指针,然后执行customCell.imageViewContainerView addSubview:originalImageView
之类的操作?如果用户滑回原始图像,则需要反转?
这对我来说似乎是一个非常重要的实现,但我认为效果很棒,而且我也很好奇它是如何完成的。我是否过度思考它并且实际上有一种非常简单的方法可以做到这一点,或者我是否可以为编写FB应用程序的人提供道具?
答案 0 :(得分:2)
我是否在正确的轨道上?如果是这样,我如何将imageView从单元格带入前视图 - 并将其保持在同一位置?
我认为你在概念性步骤上是正确的。从单元格中获取imageView并将其添加到控制器视图并不困难。您可以使用
之类的方法- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view
获取imageview的正确位置。
当您滑动到另一张图像时,原始图像会“恢复”到表格视图单元格中的原始位置。这实际上只是将一个imageView从一个视图移动到下一个视图吗?如何将它发送回原始单元格 - 当用户点击图像时保持指向该单元格的指针,然后执行类似customCell.imageViewContainerView addSubview:originalImageView?如果用户滑回原始图像,则需要反转?
我认为这是由图库和表视图控制器之间的某种协议构成的。也许它只是隐藏/显示图像,而图库中的图像实际上是一个不同的对象。 无论如何,如果你想使用相同的imageview,你可以在两个控制器之间发送带有协议的对象。
希望这有点帮助;)我认为关键在于convertRect方法。