iOS Swift: 在同一个视图控制器上进行转场动画

3
如何在单个视图控制器上实现过渡动画效果(如页面滑动),使其看起来像是在过渡到一个新的页面或控制器(尽管仅数据变化在同一视图中)?
例如:我有一个UIViewController,其中有上一个和下一个按钮。点击这些按钮后,在“相同”的UIViewController上显示不同的标题和图像。
我知道可以使用UIPageViewController实现这一点,但我是iOS新手,发现以这种方式实现比较困难。

创建一个新的UIView,并使用CoreAnimation过渡到新视图。 - Juan Catalan
Juan> 我有几百页信息需要展示,当点击下一页按钮时一个一个地呈现它们——那么你所说的创建新的UIView是什么意思——你是指通过编程实现吗——能给出一个例子吗? - Jasper
你可以通过编程创建视图,也可以使用nib文件/storyboard。另一种解决方案是实例化Sam视图控制器并定义转换,可以使用带有segue的storyboard自身或从导航控制器推送视图控制器。 - Juan Catalan
看看这篇关于如何过渡不同视图的帖子:https://dev59.com/2Gsz5IYBdhLWcg3wDjlo?rq=1 - Juan Catalan
1个回答

0

我也遇到了同样的情况。但是因为我们不需要复杂的幻灯片动画,所以我不会实现UIPageViewController。相反,我想出了以下解决方案:

  • 创建快照视图并在其上启动动画,同时在用户开始滑动时更新视图中的新数据。通过这样做,我们可以让它感觉像是我们正在过渡到另一个视图。

  • 下面的示例代码是用Xamarin.iOS编写的,但我相信它可以轻松转换为Swift/Obj-C:

            UIView snapShotView = View.SnapshotView(false); // 为视图创建快照(我假设View是容器)
            View.Add(snapShotView);
            snapShotView.Frame = View.Frame; // 添加快照并设置其框架,以便快照将重叠原始视图
    
            CGRect snapshotEndFrame = snapShotView.Frame;
            snapshotEndFrame.X = -snapShotView.Frame.Width;
    
            UIView.Animate(0.7, 0, UIViewAnimationOptions.CurveEaseInOut,
            () =>
            {
                // 加载新数据到您的视图
                ...
    
                // 动画快照视图
                snapShotView.Frame = snapshotEndFrame;
            },
            () =>
            {
                // 在执行动画后删除快照视图以防止内存泄漏
                snapShotView.RemoveFromSuperview();
                snapShotView.Dispose();
            });
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接