【问题标题】:Autolayout and concentrically smaller nested UIImageViews自动布局和同心较小的嵌套 UIImageViews
【发布时间】:2019-07-21 20:35:47
【问题描述】:

我有一个带有 8 个同心“环”的 Photoshop 文件(虽然有些不是环,而且更不规则),最大的在“后面”,尺寸减小到第 8 个,中间非常小.

“环”的绘制方式使得较小的环位于其“外部”或下一个较大环的“内部”。每个“环”的外部都是透明的,但内部也是透明的(较小的环会“坐”在那里)。

我需要支持所有 iOS 设备(通用应用)。

最大的图像的默认大小为 2048x2048 像素,但 8 层中的每一层都有一个共同的“中心”点,它们需要围绕该点旋转,并且需要围绕该点进行固定。

因此,基本上,所有 8 个都必须分层,一个在另一个之上,这样它们的中心都完全对齐。

但是艺术品的尺寸比任何 iOS 设备都大,并且自动布局必须考虑到每个设备的尺寸和方向,最大(后)层从屏幕边缘插入 8 点。

对于那些无法想象的人,这里是一个粗略的表示,其中深色背景是“透明的”,代表 iOS 设备的宽度或高度中较小的一个(取决于方向):

注意:每个较小的 UIImageView 的位置是精确的。它们都共享一个共同的中心(屏幕的中心),但每个环都位于其后面较大环的“内部”。即绿色、亮粉色和淡粉色圆圈的中心是空的/透明的,无论屏幕大小或方向如何,它们都必须完美地嵌套在一起,就像在 Photoshop 艺术资产中所做的那样。

我在自动布局上花了几个小时试图解决这个问题,当我让它在一个设备和两个方向上工作时,它在任何其他设备上都不起作用。

没有要显示的代码,因为我正尝试在 IB 中执行此操作,以便可以在所有设备上进行预览。

这甚至可以使用 IB / Auto-Layout 还是我必须切换到手动计算比例,以根据运行时的屏幕宽度/高度以及每个“环”之间的关系来调整 UIImageView 的大小?

编辑:

除非我做错了,否则将每个 UIImageView 嵌入到一个透明的 UIView 中,以便使用 UIView 来伪造“插图”,这是行不通的,因为这些数字是硬编码的,因此当它在12.9 英寸 iPad Pro,在 iPhone SE 上,每个“内嵌”UIImageView 的压缩程度更高,不会位于“内”,它是下一个更大的环,而是像一个小字母 O,周围有很多空白空间,因为那些“内嵌”不要缩放。iPad 上的 100pts 是很小的空间,但 iPhone SE 上的 100pts 是屏幕的 1/3。

【问题讨论】:

  • 你能从 IB 展示你的布局吗?
  • 应该很容易做,只需要创建一个容器,把所有的图片都放进去,然后设置图片之间的宽高关系
  • 你能分享你想要的设计图像和行为吗?
  • 已经描述得很清楚了,我不能分享真实资产,因为它们属于客户,但如果你真的需要的话,我已经提供了一个粗略的模型。更多的是关于拥有相同中心但大小和形状不同的事物之间的关系……这就是问题所在。

标签: ios swift xcode autolayout ios-autolayout


【解决方案1】:

您可以使用 CAShapeLayer 和 UIBezierPath 绘制圆圈。由于您试图将其放入正方形中,因此我将容器大小定义为父容器的宽度或高度,具体取决于较小的内容,这将允许旋转和不同的屏幕尺寸。至于中心,您始终可以通过获取方形容器的中心坐标(container.bounds.size.width / 2)找到它。要旋转图层/子图层,您可以使用以下答案:https://stackoverflow.com/a/3929703/4577610

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多