UIViewController 自定义转换卡在 iOS13 上

2024-01-08

我在 iOS 应用程序中实现了两个视图控制器之间的自定义转换,并且它在 iOS 10、11 和 12 上运行良好。

现在我想使用 Xcode 11 beta 6 和 iOS 13 beta 8 为 iOS 13 做好准备,但转换被卡住了。

自定义转换应将第一个视图控制器向上移出屏幕,第二个视图控制器从下向上移动。但现在又回到了iOS13默认的呈现风格pageSheet,只需将第一个视图控制器缩小一点并添加一个暗淡的覆盖层。但第二个视图没有出现。

我发现在方法中animatePresentation(context: UIViewControllerContextTransitioning) the context不返回“来自”视图,所以context.view(forKey: .from)回报nil.

如果没有“来自”视图,我该怎么办?

FlyUpTransition.swift

class FlyUpTransition: NSObject, UIViewControllerAnimatedTransitioning {

    var mode: Mode = .present

    enum Mode {
        case present
        case dismiss
    }

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return TimeInterval(0.45)
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        switch mode {
        case .present:
            animatePresentation(context: transitionContext)
        case .dismiss:
            animateDismissal(context: transitionContext)
        }
    }

    func animatePresentation(context: UIViewControllerContextTransitioning) {
        guard let fromView = context.view(forKey: .from), let toView = context.view(forKey: .to) else { return }
        ...
    }

    func animateDismissal(context: UIViewControllerContextTransitioning) {
        guard let fromView = context.view(forKey: .from), let toView = context.view(forKey: .to) else { return }
        ...
    }
}

TL;DR

这是 iOS 中的一个错误,但你可以使用context.viewController(forKey:.from).view作为解决方法。

详细信息

这似乎是 iOS 13.0 中的一个错误。从 iOS 13.1 beta 3 开始,它仍然存在。http://www.openradar.me/radar?id=4999313432248320 http://www.openradar.me/radar?id=4999313432248320

转换上下文的view(forKey:)在某些情况下,方法会错误地返回 nil。看来这种情况正在发生view(forKey: .from)当呈现视图控制器以非模态方式呈现时。当解除最初从非模态视图控制器呈现的视图控制器时,以下结果view(forKey: .to)也为零。

我不仅在 iPhone 上的新工作表样式演示中观察到了这一点,而且还在 iPad 上的普通表单工作表和弹出窗口中观察到了这一点。

这个问题的另一个表现似乎是finalFrame(for:)方法返回错误CGRect当被问及此视图控制器的最终框架应该是什么时。在我的测试中,它返回一个全屏矩形,即使正确的视图较小。

解决方法是使用视图控制器返回的根视图控制器viewController(forKey:)方法,虽然文档 https://developer.apple.com/documentation/uikit/uiviewcontrollercontexttransitioning/1622055-view明确不鼓励:“此方法返回的视图可能是也可能不是相应视图控制器的根视图。”

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

UIViewController 自定义转换卡在 iOS13 上 的相关文章

  • 为什么 Xcode 4 不会对我未完整实现 UITableViewDataSource 协议发出警告?

    如果我在 Xcode 中使用以下代码声明并不完全实现我自己的协议 一些协议 h protocol SomeProtocol
  • 这个错误是无效上下文0x0吗?

    我在ViewDidLoad中编写了以下代码 Implement viewDidLoad to do additional setup after loading the view typically from a nib void view
  • 自动布局、UIDynamics 和动画

    我对自动布局还很陌生 并且对如何为视图设置动画感到困惑 我读了很多 我知道你必须遵守限制 编辑它 然后包装layoutIfNeeded in an UIView动画块 但当真正要做的时候 我却有点失落 我很乐意有人能向我解释如何做这个动画
  • 在另一种语言中使用 dateFormatter [重复]

    这个问题在这里已经有答案了 我正在运行一段返回的代码nil在具有不同语言设置的 iPhone 上运行时 代码示例如下所示 let dateFormatter DateFormatter dateFormatter dateFormat MM
  • 在后台任务中安排通知

    我正在为 iOS 开发一个日历 闹钟应用程序 它与网络服务器同步 当在服务器上添加活动时 会发出推送通知 以便 iOS 客户端可以获取新数据 并根据需要更新和安排下一次警报的时间 本地通知 但这仅在应用程序在客户端打开时才有效 我希望客户端
  • 使用 Google place API 从 lat long 获取附近的地点

    我正在使用 google place API 即 https maps googleapis com maps api place search json location 33 7167 73 0667 radius 500 type f
  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • 如何使用 Swift 获取 YouTube 频道的所有播放列表?

    我的问题不是关于从一般频道检索视频 我只想获取该频道创建的所有 播放列表 并检索每个播放列表的缩略图 标题和视频数量 这是一个 YouTube 频道示例 正如您所看到的 有很多已创建的播放列表 截至目前 我只能获取某个频道最新上传的视频 在
  • Swift 中具有透明背景的按钮边框

    我怎样才能做一个UIButton边框看起来像下图 入门 按钮一样具有透明背景吗 我应该如何使用情节提要来实现这一点 或者如何以编程方式实现这一点 设置backgroundColor to clearColor使按钮透明 例如尝试下面的代码
  • 混合静态和动态 UITableViewController 内容会导致 NSRangeException

    我一直在寻找这个错误 并找到了一些具有类似行为的帖子 但没有解决问题的解决方案 我有一个 UITableViewController 在 SB 中声明为静态 它具有以下部分 第 0 部分 配方 是静态的 有 4 个单元格 第 1 部分 口味
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • 使用 UIImageJPEGRepresentation 时,compressionQuality 应该是多少?

    我想对用户库中的照片应用滤镜 然后将其写回磁盘 我在用着UIImageJPEGRepresentation 该函数需要一个UIImage and a compressionQuality值介于 0 0 和 1 0 之间 因为我想保留原始质量
  • Xcode 9 中的“addingPercentEncoding”是否损坏?

    在 Swift 3 x 和 Xcode 9 beta 2 中 使用addingPercentEncoding https developer apple com documentation swift string 1690785 addi
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we

随机推荐

  • Zend 表单 ajax 提交验证

    我目前正在尝试同时使用 ajax 和 zend validate 验证 zend 表单 让我解释一下 我的表单在 iframe fancybox 中弹出 提交后 我需要显示一条 谢谢 消息 关闭 iframe 并重定向用户 如果成功的话 我
  • Child_process 抛出错误:写入 EPIPE

    我只是练习一些关于child process the的node js代码link https nodejs org download release v5 2 0 docs api child process html child proc
  • Spring MVC Web 应用程序背后的 zuul 重定向问题

    我有一组 Spring Boot 1 3 3 和 Spring Cloud Brixton RC2 微服务 在 Zuul 后面运行 并且在重定向中重写我的 URL 时遇到问题 我的主要问题是我的网络应用程序位于 zuul 后面 并且在重定向
  • mysqldump 与 db 位于单独的文件中

    我正在编写一个单行命令 将所有数据库备份到各自的名称中 而不是使用将所有数据库转储到一个 sql 中 例如 db1 保存到 db1 sql db2 保存到 db2 sql 到目前为止 我收集了以下命令来检索所有数据库 mysql uunam
  • R ggplot2 aes 参数

    我有一个功能 vis function df x p1 lt ggplot df aes x geom line aes y v2 p1 我有一个数据框 df data frame v0 c 1 2 3 v1 c 2 3 4 v2 c 3
  • FFmpeg drawtext - 无法从文件加载字体[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我尝试使用 FFmpeg 在视频顶部添加简单的文本drawtext范围 每次我要这样做时 都会返回错误 无法从文件 arial ttf 加载字体 无法
  • 如何在 NSIS 中获取命令输出?

    我想知道如何在 NSIS 中获取 execwait 命令的输出 例如 如果我运行tree 我将如何获得输出 这将是实际的树 您不能使用 ExecWait 来做到这一点 您必须使用以下插件之一 nsExec http nsis sourcef
  • 类似亚马逊的界面,用于选择产品尺寸和颜色(即单击一个小红色框来选择红色产品等)

    在我的在线商店中 我想实现一个像Amazon s https rads stackoverflow com amzn click com B000YVES0I用于选择产品尺寸和颜色 即 用户应该看到一堆小框 而不是不同尺寸 颜色的单选按钮
  • 如何在 Swift 中通知队列(GCD)

    我正在使用 GCD 来通知主线程 函数内有 2 个异步调用 My code func getWavesByMostRecent closure escaping Wave gt Void var waves Wave let dispatc
  • 优化 MySQL 中联接中的 OR

    我在 MySQL 中有一个相当复杂的查询 当其中一个连接使用 OR 完成时 查询速度会大大减慢 我怎样才能加快速度 相关的连接是 LEFT OUTER JOIN publications p ON p id virtual performa
  • 创建binder时,Spring Cloud config + 总线对配置服务器调用两次

    我使用 spring cloud config 和 spring cloud bus 创建了一个简单的项目 由于某种原因 配置客户端两次调用配置服务器 第一次发生在创建引导程序的上下文时 预期的行为是什么 但第二次发生在创建绑定器的上下文时
  • 有人可以解释这是如何工作的吗?

    我有这行代码 class ButtonPanel extends JPanel implements ActionListener public ButtonPanel yellowButton new JButton Yellow 它有效
  • 为什么 cout 使用 << 会产生正确的字符串输出,但使用 + 却不会? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 这显示没有输出 int x 10 cout lt lt Hello C x 但这确实显示了输出 int x 10 cout lt
  • 使用基本矩阵 opencv 确定相机运动

    我尝试使用 opencv 从基本矩阵确定相机运动 我目前正在使用光流来跟踪每个其他帧中的点的移动 基本矩阵是从基本矩阵和相机矩阵导出的 我的算法如下 1 使用良好的特征跟踪功能来检测帧中的特征点 2 跟踪接下来两帧或三帧的点 Lk光流 在此
  • NPM:如何运行安装后?

    只是一个简单的问题 在我的 node js 项目中 我如何只运行安装后脚本 而不运行安装之前 仅供参考 这是我的 package json name gestionclientjs dependencies repository devDe
  • 如何在创建过程中引用同一对象的属性? [复制]

    这个问题在这里已经有答案了 我正在尝试做类似的事情 o a foo 42 b o a 但这会返回一个错误 指出 o 未定义 我知道我以后可以做 o b o a 但我想知道在定义 o 的同时是否可以定义 b 现在这已经是古老的历史了 但我刚刚
  • 如何在 redshift 中将行连接并转置为列

    我有以下table1其独特的关键是type type age A 20 B 21 C 22 我有以下结果表 我想加入他们 type score A 10 A 20 A 30 B 40 B 50 以下转置形式 type age score s
  • 连接 Keras 模型/替换输入但保留层

    这个问题类似于Keras 替换输入层 https stackoverflow com questions 49546922 keras replacing input layer 我有一个分类器网络和一个自动编码器网络 我想使用自动编码器的
  • 使用 List 比 IEnumerable 有什么好处?

    或者相反 我一直使用通用列表 但我偶尔也会听说 IEnumerables 老实说 我 今天 不知道它们的用途以及为什么我应该使用它们 因此 冒着网络上永远有更多东西宣扬我无知的风险 我谦虚地提出这个问题 Well List
  • UIViewController 自定义转换卡在 iOS13 上

    我在 iOS 应用程序中实现了两个视图控制器之间的自定义转换 并且它在 iOS 10 11 和 12 上运行良好 现在我想使用 Xcode 11 beta 6 和 iOS 13 beta 8 为 iOS 13 做好准备 但转换被卡住了 自定