【问题标题】:Scaling a sub classed UIView缩放子类 UIView
【发布时间】:2011-08-12 18:03:16
【问题描述】:

我创建了 UIView 的子类,并尝试在其 m 文件中缩放和移动视图,但遇到了一些问题。当我使用命令时: self.frame = CGRectMake(self.frame.origin.x-10,self.frame.origin.y-10,self.frame.size.width/2,self.frame.size.height/2); 对象移动位置但不调整大小(视图仅包含几个 UIImageViews)。在子类的 xib 文件中,我检查了 Clip Subviews 和 Autoresize Subviews 的选项,但似乎都没有发生。关于为什么视图不会使用此命令调整大小以及如何让它调整大小的任何想法。

【问题讨论】:

  • 重置框架后视图大小没有变化吗?你是100%积极的吗?尝试更改它的背景颜色,以便您可以在屏幕上看到它。还是您的子视图应该改变大小或移动?
  • 你的子视图有autoresizingMask吗?你不想用transform 缩放你的 UIView 而不是改变它的框架吗?

标签: iphone ios cocoa-touch


【解决方案1】:

调整视图大小与缩放视图不同。把你的视图想象成一个相框。您在上面所做的是移动框架,并移动右下角(您正在缩短框架的木条) - 但这不会自动缩小图片。

有四种方法可以通过子视图调整视图的大小:

  1. 让超级视图剪辑其子视图(通过设置view.clipsToBounds = YES):子视图不会调整大小或重新布局,而只会显示在框架内的区域中。
  2. 让超级视图不剪裁其子视图(通过设置view.clipsToBounds = NO):更改超级视图大小不会对子视图产生任何视觉影响,它们也会显示在框架之外。
  3. 给子视图autoresizingMasks:子视图不会改变大小,但它们会根据其自动调整大小的掩码重新布局(例如,子视图可能始终与框架的右下角保持 10 px 的距离,或者可能始终跨越正是框架的宽度。)请注意,这不一定会自动缩放子视图内容。相应地设置subview.contentMode
  4. 缩放超级视图:通过设置superview.transform = CGAffineTransformScale(superview.transform, 0.5, 0.5),您可以缩小超级视图及其所有子视图(实际上是缩小)。请注意,这会使 superview.frame 未定义,这意味着您不应再使用它。它也会使事情变得有点模糊。

您也可以“手动”更改所有子视图,但这违背了拥有良好视图层次结构的目的。

正如 MishieMoo 所说,暂时将您的超级视图的 backgroundColor 设置为可见的东西。这很可能表明您的观点确实在发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多