iOS Facebook纸质popover视图控制器

iOS Facebook纸质popover视图控制器,ios,iphone,objective-c,facebook,uiviewcontroller,Ios,Iphone,Objective C,Facebook,Uiviewcontroller,正如标题所说,我正在寻找一种实现视图控制器的方法,它以与Facebook报纸的通知/消息/朋友请求视图控制器相同的方式呈现自己 我想要的是有一个图标(就像Facebook报纸上的图标),当用户点击它时,一个新的视图控制器会以几乎和报纸上一样的动画方式弹出(因为我认为人们很难再进一步润色这个动画了)。我希望它是一个视图控制器,因为它将进行一些提升,我希望将其分离,这意味着不欢迎使用UIView实例 关于如何滚动这样的视图控制器有什么线索吗? 我猜父控制器(显示所有新闻的控制器)实际上是一个UICo

正如标题所说,我正在寻找一种实现视图控制器的方法,它以与Facebook报纸的通知/消息/朋友请求视图控制器相同的方式呈现自己

我想要的是有一个图标(就像Facebook报纸上的图标),当用户点击它时,一个新的视图控制器会以几乎和报纸上一样的动画方式弹出(因为我认为人们很难再进一步润色这个动画了)。我希望它是一个视图控制器,因为它将进行一些提升,我希望将其分离,这意味着不欢迎使用
UIView
实例

关于如何滚动这样的视图控制器有什么线索吗?
我猜父控制器(显示所有新闻的控制器)实际上是一个
UIContainerViewController
,它将子控制器添加到自身中,然后以特定的方式设置其视图的动画

我已经设法找到了类似的东西,那就是。这看起来像是朝着正确的方向射击,但需要一些额外的工作和抛光才能达到同样的效果和平滑度。如果需要的话,我可能会更深入地研究它,但我希望你们可以有更好的东西供你们使用。:)

任何线索都将不胜感激

附言:如果你对我的意思有任何理解上的问题(比如如果你没看过论文),请在评论中告诉我,我也会在帖子中看到一些图片

编辑:
如果回放足够多次,整个动画就足够清晰可见。我不是在追求图标的反弹(至少没有那么多),而是对过渡本身更感兴趣。如果需要的话,我仍然可以提供更多的照片。

好的,我做了一个类似的事情,你可以看到一个日历“弹出式”视图

这并不完全是你想要的,但我认为你会得到一场非常接近的比赛

我在为其制作日历的应用程序中使用了一个故事板,所以我也将使用故事板来编写这篇文章

首先要避免的是,应用程序的日历部分使用全新的ViewController来管理它。这样做可以做几件事

  • 这意味着我可以将日历的代码与使用它的视图控制器的代码分开。这使得它非常容易维护。如果日历需要修复,我会在日历视图控制器中进行修复

  • 它使日历在应用程序的任何需要的部分都非常容易使用。因为它在自己的视图控制器中,所以我只需要展示它,它可以在任何地方使用

  • 所以。。。我会怎么做你的。

    创建名为
    mypoOverviewController
    的视图控制器,并将其添加到情节提要中。现在,从要从中显示的任何视图控制器创建一个模态序列。如果你想要的话,甚至可以按一下按钮。使segue模式。并使其没有动画

    这将立即从您当前的VC切换到
    MyPopoverVC

    现在,在.h文件中需要几个属性

    @property (nonatomic, strong) UIView *backgroundView;
    @property (nonatomic, assign) CGPoint startPoint;
    
    现在,在调用它的VC中,您需要像这样的prepareForSegue方法

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([segue.identifier isEqualToString:@"myPopoverSegue"]) {
            MyPopoverVC *controller = segue.destinationViewController;
    
            controller.backgroundView = [self.view snapshotViewAfterScreenUpdates:NO];
            controller.startPoint = // the position of the button that was pressed
        }
    }
    
    - (void)viewDidLoad
    {
        ...
        self.theViewYouWantToBounce.frame = CGRectMake(self.startPoint.x, self.startPoint.y, 0, 0);
        ...
    }
    
    现在设置popover视图控制器

    首先,确保backgroundView属性已添加到self.view

    [self.view insertSubview:self.backgroundView atIndex:0];
    
    还要确保背景视图与屏幕大小相同

    或者你也可以在故事板上这样做。这样做的目的是获取上一个视图控制器的视图快照,并将其放在新视图控制器的后面。这让它看起来像是旧VC上出现的popover,而实际上它只是一个屏幕截图。没有这个新的VC将有一个纯黑色的背景(或任何颜色你设置)

    起点如何

    在视图中,load是否做了类似的事情

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([segue.identifier isEqualToString:@"myPopoverSegue"]) {
            MyPopoverVC *controller = segue.destinationViewController;
    
            controller.backgroundView = [self.view snapshotViewAfterScreenUpdates:NO];
            controller.startPoint = // the position of the button that was pressed
        }
    }
    
    - (void)viewDidLoad
    {
        ...
        self.theViewYouWantToBounce.frame = CGRectMake(self.startPoint.x, self.startPoint.y, 0, 0);
        ...
    }
    
    这将把它放在起始点(按钮所在的位置),并使其大小为零

    我假设你已经关闭了自动布局,以保持简单

    好的,现在。在
    视图中显示

    - (void)viewDidAppear
    {
        [super viewDidAppear];
    
        [UIView animateWithDuration:0.5
                              delay:0.0
                 usingSpringDamping:1.0
              initialSpringVelocity:1.0
                            options:0
                         animations:^{
                             self.theViewYouWantToBounce.frame = CGRectMake(//the end frame of the view
                         }
                         completion:nil];
    }
    
    您必须调整设置(阻尼、初始速度),但这将使视图从起点处的当前大小(0,0)反弹到您希望的大小和位置

    要隐藏它,只需在关闭视图之前将动画恢复为零大小

    我希望这是有道理的

    要记住的事情

  • 在新的视图控制器中执行此操作
  • 假装它在同一个VC中(使用快照)
  • 在起点处使视图非常小
  • 在“视图”中确实出现了将其设置为所需大小的动画

  • 希望这有所帮助。

    Afaik纸质应用程序仅在美国提供。“你最好用手机或别的什么东西录下来。”福格迈斯特同意。我编辑了这篇文章以更好地反映这一特点。好的,现在就写点东西。你看到我的答案了吗?你没有评论、投票或接受它。Thanks@Fogmeister看到它,我很高兴你花时间写了它。我只是没有时间来实现它,所以说不出它是否适合我的需要。一旦我实施它,我就会接受它。我保证。