缩放UIView及其所有子视图

62

我有一个UIView,里面有大约50个UIButtons。所有按钮的位置都是相对于我的主UIView的左上角以像素为单位给出的。

视图中使用的所有(背景)图片都有更高的分辨率。由于我正在将我的应用程序从iPhone移植到iPad,我想增加UIView的有效像素大小。

现在我正在寻找一种方法将整个UIView放大2倍,而不破坏内部元素的位置。这可能吗?

顺便说一下,UIView是在XCode中的NIB文件中设计的。但如果可以通过编程实现也无妨。


你想让按钮保持在它们原来的位置还是随着父视图一起拉伸? - KDaker
4
50个按钮?听起来像是终端用户的噩梦。你是在尝试制作计算器吗? - Richard J. Ross III
2
按钮也必须升级。因此,它们的宽度和高度必须随着其父级的加倍而加倍。--别担心,这不是用户的噩梦。该应用程序显示一个体育场,您可以单击每个区域并从那里获取图像。 - andreas
只需将按钮框架的宽度和高度设置为新值即可 - 这不会影响按钮的起点。 - Luke
4
不确定这是否是您想要的 self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2); - Bryan Chen
这可能行得通!我的第一次尝试保留了我想要的所有按钮。现在我会尝试让它工作。 - andreas
4个回答

126

我最终使用了

self.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 2, 2);

它使我能够保留在Interface Builder中创建的设计。

不幸的是,在这种情况下,图像的清晰度会受到影响,但与编写整个设计的脚本相比,这只是一个小代价。


41
稍微简单一点:self.view.transform = CGAffineTransformMakeScale(2, 2);翻译:将self.view的缩放比例变为2倍。 - hatfinch
这会对视图的框架产生什么影响?我有兴趣使用相同的方法,在多任务处理的情况下缩小菜单,以适应窗口太窄而无法容纳完整菜单。变换属性的文档包含以下警告:“如果此属性不是恒等变换,则框架属性的值未定义,因此应将其忽略。” https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/transform - Joey Carson
1
这只是一个想法,我还没有尝试过。也许,与其直接使用变换属性,最好使用CGRectApplyAffineTransform对当前框架本身进行处理,因此框架会相应更新,并且仍然可以在依赖于它的其他逻辑中信任它。 - Joey Carson
1
UIView在应用缩放变换后未被居中。我是否有遗漏的地方?我想在将其缩小后将UIView居中。 - Salman Khakwani
Swift 4: myView.transform = CGAffineTransform.identity.scaledBy(x: 2, y: 2) Swift 4:myView.transform = CGAffineTransform.identity.scaledBy(x: 2, y: 2) - huync

13

适用于Swift 4.0,缩放比例为2x:

myView.transform = CGAffineTransform.identity.scaledBy(x: 2, y: 2)

13

Swift 3.0 更新

self.view.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)

2

您可以首先使用CGRectMake方法编程创建这些按钮,并将宽度和高度设置为X和Y,如果检测到iPad,则乘以2,对于原点,它也应相应更改,如果太靠近彼此可能会重叠。

编辑:这完全取决于您的逻辑,我也不确定。


没错,但是我已经在iPhone应用程序的NIB中有了我的按钮。我希望现在有一个比创建所有按钮的编程解决方案更简短的方法。 - andreas
@andreas 我不确定是否有这样的解决方案可以实现相应的调整大小,但从我所看到的情况来看,通过编程创建始终是更好的选择,因为您可以随时修改代码。 - Danny Lin
我同意。我决定以图形方式进行是因为完美对齐的困难。使用界面生成器更容易一些。 - andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接