如何在表格视图中对图像进行动画处理以同时扩展和打开另一个视图控制器?

2024-07-01

我正在制作一个消息应用程序,我希望用户单击我的表格视图中的图像,它应该扩展到全屏并在导航栏上显示不同的控件。

我该怎么办?

我想我可以拍摄相同的图像,将 UIImageView 放在原始单元格图像之上并将其动画化为全屏。但是我如何在没有闪烁、延迟和动画的情况下呈现不同的控制器呢?

许多消息传递应用程序都这样做。


使用自定义过渡,将图像视图从初始预览尺寸扩展到全屏。调用时,返回一个转换委托transitioningDelegate,这又应该从返回一个动画控制器animationControllerForPresentedController:presentingController:sourceController:。该动画控制器将负责在以下情况下执行的动画:presentViewController:animated:completion:叫做。

在您的动画控制器中,实现并在其中创建动画:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    MyChatViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    [[transitionContext containerView] addSubview:toViewController.view];
    toViewController.view.frame = [transitionContext.containerView convertRect:fromViewController.imageViewToTransitionFrom.frame fromView:fromViewController.imageViewToTransitionFrom];

    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        toViewController.view.frame = [transitionContext finalFrameForViewController:toViewController];
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}

Here, MyChatViewController是你的聊天视图控制器并且imageViewToTransitionFrom保存您想要从中转换的图像视图。

如果您需要推送视图控制器而不是呈现它(就像 WhatsApp 那样),可以使用类似的方法来执行自定义推送动画。

您可以以类似的方式执行关闭/弹出动画,或使用默认的系统动画。

Read here http://www.objc.io/issue-5/view-controller-transitions.html关于 iOS7 中的自定义视图控制器转换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在表格视图中对图像进行动画处理以同时扩展和打开另一个视图控制器? 的相关文章

随机推荐

  • 如何在VBA中给单元格填充颜色?

    我想为当前工作表中具有 N A 值的单元格着色 为了做到这一点 我使用以下宏 Sub ColorCells Dim Data As Range Dim cell As Range Set currentsheet ActiveWorkboo
  • 替换 pytest 中的测试用例继承?

    背景 在 Python 中unittest https docs python org 3 library unittest html在框架中 在一组基本测试上使用继承来将整套测试应用于新问题 并且偶尔添加其他测试是一种相当常见的习惯用法
  • AddKeysToAgent 是 ssh 配置在 Mac 上不起作用

    您好 我的 ssh 配置文件设置为自动将 ssh 密钥添加到 ssh 代理 然而 目前它不起作用 它之前正在工作 我更新了 bitbucket 的 ssh 密钥 但它不再起作用 当我重新启动时 我必须使用 ssh add K 选项手动添加
  • C++地址运算符的用途? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么要使用指针 https stackoverflow com questions 162941 why use pointers 我知道 C 的作用 但它能用来做什么呢 当在调用站点使用时 用于将
  • Python 元组列表到 int 列表

    所以我有x 12 1 3 元组列表 我想要x 12 1 3 整数列表 以最好的方式可能 你能帮忙吗 你没有说 最好 是什么意思 但大概你的意思是 最Pythonic 或 最易读 或类似的东西 F3AR3DLEGEND 给出的列表理解可能是最
  • 你应该捕获所有异常吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 PopUp 插件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我尝试搜索插件 jquery 来创建评论弹出窗口 但我不知道如何使用它以及支持 Popup 的插件是什么 任何人都可以帮我展示简单的代码并
  • 如何将两个矩阵的列与所有组合相乘

    我喜欢将具有相同行的两个矩阵的列的所有可能组合相乘 这意味着两个矩阵 例如a 3x3 and b 3x4 将生成带有元素的 3x4 矩阵a i j a k j i and k表示从 1 到 3 的行 并且j代表从 1 到 4 的列 我创建了
  • 使用 writeBytes 的 Java 客户端套接字

    我正在从缓冲区读取字符串并将其写入服务器 我遇到的问题是 当我打开套接字并循环写入时 服务器永远不会收到该字符串 当我使用这个时 try Socket send new Socket localhost 1490 DataOutputStr
  • 在 Android 的视图中创建透明的圆形切口

    我正在尝试创建一个半透明的帮助叠加层 以便在用户首次打开应用程序时显示在我的活动的主屏幕上 我想通过 剪切 与按钮位置相对应的覆盖层部分来突出显示主布局中包含的按钮 并使用 setContentView 进行膨胀 并使剪切部分透明 覆盖层是
  • 错误:索引表达式中的函数必须在 Postgres 中标记为 IMMUTABLE

    我想创建多列表达式索引 但是当我创建索引时 输出以下消息 detail message wapgrowth gt create index CONCURRENTLY idx test on tmp table using btree sky
  • 避免使用react-redux重新渲染一个大的项目列表

    我正在为我的应用程序使用 redux 以及 React 和 TypeScript 我正在处理在我的应用程序的不同位置使用的许多项目 我的状态看起来像这样 items 42 53 A large dictionary of items ite
  • Firebase 令牌身份验证错误

    我正在使用 firebase 存储上传文件 但是当我上传时出现此错误 E StorageUtil error getting token java util concurrent ExecutionException com google
  • 在控制台应用程序中将命令行参数传递到 VB6 IDE

    我有一个 VB6 控制台应用程序 它使用命令行参数 为了进行调试 我希望能够从 IDE 启动它 并且最好能够向它传递这些参数以查看它的正常运行情况 我意识到我可以在适当的位置设置一个断点 并使用立即窗口在命令行之外设置值 并且我过去使用过一
  • 如何使用javascript从另一个页面(同一域)的内容中获取信息?

    假设我有一个网页 index html 包含以下内容 li div item1 div a href details item1 html details a li 我想要一些 javascript index html加载那个 detai
  • 连接到进程后 Xcode 控制台为空[重复]

    这个问题在这里已经有答案了 我在 iPhone 上构建了一个应用程序 退出它 再次启动它 然后成功附加到 Xcode 中的进程 现在我在日志导航器中运行了调试 但我的控制台是空的 我不应该在那里看到所有常用的控制台输出吗 您可以在设备日志中
  • SQL Server,误导性的 XLOCK 和优化

    从我最近所做的一些测试和阅读来看 XLOCK 的 X 独占 名称部分似乎具有误导性 事实上 它并不比 UPDLOCK 多加锁 如果它是独占的 它将阻止外部 SELECT 但事实并非如此 我无法从阅读或测试中看出两者之间的区别 XLOCK 唯
  • Mysql Slave 未更新

    我已经设置了复制 一切看起来都很好 我没有错误 但数据没有被移动到从站 mysql gt show slave status G 1 row Slave IO State Waiting for master to send event M
  • 在 lambda 中捕获完美转发的变量

    template
  • 如何在表格视图中对图像进行动画处理以同时扩展和打开另一个视图控制器?

    我正在制作一个消息应用程序 我希望用户单击我的表格视图中的图像 它应该扩展到全屏并在导航栏上显示不同的控件 我该怎么办 我想我可以拍摄相同的图像 将 UIImageView 放在原始单元格图像之上并将其动画化为全屏 但是我如何在没有闪烁 延