缩放 UIView 及其所有子项
Posted
技术标签:
【中文标题】缩放 UIView 及其所有子项【英文标题】:Scale UIView and all its children 【发布时间】:2013-01-19 19:12:29 【问题描述】:我有一个带有大约 50 个 UIButton 的 UIView。所有按钮的位置都以像素为单位,相对于我的主 UIView 的左上角。
视图中使用的所有(背景)图像均以更高分辨率提供。当我将我的应用从 iPhone 移植到 iPad 时,我想增加 UIView 的有效像素大小。
现在我正在寻找一种将整个 UIView 放大 2 倍的方法。在不破坏内部元素位置的情况下是否可能?
仅供参考,UIView 是在 XCode 中的 NIB 文件中设计的。但我不介意它是否可以通过编程方式完成。
【问题讨论】:
如您希望按钮保持在其原始位置或与父视图一起拉伸? 50 个按钮?听起来像是最终用户的噩梦。你想做一个计算器吗? 按钮也必须升级。所以他们的宽度和高度必须加倍,因为他们的父母也加倍。 -- 别担心,这不是用户的噩梦。该应用程序显示了一个体育场,您可以单击每个区域并从那里获取图像。 只需将按钮框架的宽度和高度设置为新值 - 这不会影响按钮的原点。 不确定这是不是你想要的self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2);
【参考方案1】:
对于 Swift 4.0,缩放 2 倍:
myView.transform = CGAffineTransform.identity.scaledBy(x: 2, y: 2)
【讨论】:
【参考方案2】:Swift 3.0 更新
self.view.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)
【讨论】:
【参考方案3】:我最终使用了
self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2);
它允许我保留在 Interface Builder 中创建的设计。
不幸的是,在这种情况下,图像的清晰度会受到影响,但与以编程方式编写整个设计脚本相比,这是一个很小的代价。
【讨论】:
稍微简单一点:self.view.transform = CGAffineTransformMakeScale(2, 2);
这最终会如何影响视图的框架?在窗口太窄而无法容纳完整菜单的多任务处理的情况下,我有兴趣使用相同的方法来缩小菜单。转换属性的文档包含以下警告。 “如果此属性不是恒等变换,则框架属性的值未定义,因此应被忽略。” developer.apple.com/library/ios/documentation/UIKit/Reference/…
只是在这里吐口水,还没试过,但也许与其直接使用transform属性,不如在当前帧本身上使用CGRectApplyAffineTransform,因此帧会相应更新,仍然可以信任在其他依赖它的逻辑中。
UIView 在应用缩放转换后没有居中。我有什么遗漏吗?我想在缩小 UIView 后将其居中。
斯威夫特 4:myView.transform = CGAffineTransform.identity.scaledBy(x: 2, y: 2)
【参考方案4】:
您可以首先以编程方式创建这些按钮,例如使用CGRectMake
方法创建这些按钮,并将宽度和高度声明为 X 和 Y,如果 ipad 被检测到原点,它也应该分别改变,可能太近会导致重叠
编辑:这完全取决于你的逻辑,我也不确定
【讨论】:
确实如此,但我已经在NIB 的iPhone 应用程序中拥有了我的按钮。我希望有一个比现在以编程方式创建所有按钮更短的解决方案。 @andreas 我不确定是否有这样的解决方案可以分别调整大小,但据我所知,以编程方式创建总是会更好,因为您可以随时修改代码 我同意。我决定以图形方式进行操作的原因是完美对齐的难度。使用 Interface Builder 更容易。以上是关于缩放 UIView 及其所有子项的主要内容,如果未能解决你的问题,请参考以下文章