ios - 在没有 AutoLayout 效果的情况下缩放自定义 UIView 大小

标签 ios swift uiview scaling

问题

如何创建具有用户定义大小的 UIView,然后按比例放大/缩小以适合作为 UIViewController 的 subview ?

用例

我正在开发一个主要侧重于在连接到 iOS 设备的外部显示器上显示自定义 UIView 的应用程序。应创建自定义 View 以原生适合外部显示器。假设外接显示器的分辨率为 1920x1080。将创建 UIView 以适合该大小,然后自动布局将完成它。 - 太棒了!

通常,应用程序用户实际上看不到外接显示器,因此应用程序的另一个重要部分是在 iOS 设备上提供外接显示器的表示。当然,这些小窗口不会与外部显示器具有相同的分辨率,并且由于 AutoLayout,简单地创建另一个 View 并将其粘贴到内部显示器上不会产生相同的结果。

目标

我想知道如何以与外部显示器相同的尺寸(因此布局相同)以编程方式创建另一个自定义 View 实例,然后缩放该 View 向上/向下填充内部显示屏上的 subview 。同样,重要的是内部显示器上的预览窗口与外部显示器上显示的内容相同。我知道可能存在一些缩放伪影 - 这完全没问题。

应用实例

有关的应用程序可以在 liveevent.software 查看。 .我的问题是关于外部显示器和在 iPad 屏幕上查看的外部显示器的预览。当然,我们已经有了这个工作,但我们正在添加更多功能,并且需要本地预览与外部预览完全相同,以便运算符(operator)知道消息是否太长等...

重要提示

正在缩放的​​ UIView 不包含任何手势识别器或其他需要用户交互的项目。只需几个 UILabel。

问题

当前的“工作”解决方案是创建自定义 View 的两个实例,并让它们根据自动布局进行调整。虽然这会粗略估计外部显示的内容,但并不准确。例如,文本可能会在 iOS 预览窗口中换行,但在实际的外部显示器上不会(因为它的尺寸更大)。

最佳答案

我不会创建 View 的另一个实例并使用资源根据用户操作更新两者,而是使用 snapshotView 创建任何更改时的 View 快照。方法。在性能方面,snapshotView 非常高效,它返回一个内容不可编辑的 View 对象。这意味着您可以根据需要对其进行缩放,以便在第二个屏幕上获得 currentView 的精确镜像。

SnapshotView 方法可能会使用 gpu 资源,从而让您的 CPU 可以在第二个屏幕上自由发挥高帧率和性能。

关于ios - 在没有 AutoLayout 效果的情况下缩放自定义 UIView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42894549/

相关文章:

ios - UIBarButton 项目不会出现在导航栏中

uitableview - UITableViewCell 和 UIViewController 之间通信的最佳方式

iphone - 从 subview 中删除所有 UIButton

objective-c - setNeedsDisplay 在一个大的 UIView 上导致

ios - 呈现自定义 alertView/ViewController

iphone - iOS:使用 UIBezierPath 屏蔽 UIImage

ios - Swift - 如何确定应用程序暂停时哪个 ViewController 处于事件状态?

ios - 在 UITableViewCell 中修改 UIView 外观的正确方法是什么?

ios - 如何通过单击单元格的 subview 获取 UITableViewCell 的 indexPath - 获取不兼容的指针类型警告

ios - 在 Objective-C 中使用带或不带后缀 .f 的 CGFloat 是否存在性能差异