Cocoa touch 什么是「;“模式”;接口生成器中的属性,该属性提供;“按比例填充”&引用;“方面匹配”;等

Cocoa touch 什么是「;“模式”;接口生成器中的属性,该属性提供;“按比例填充”&引用;“方面匹配”;等,cocoa-touch,interface-builder,Cocoa Touch,Interface Builder,我想知道下拉菜单“模式”是关于什么的?它包含“填充比例”、“方面匹配”等。到目前为止,我从未改变过它,但我很好奇它能用来做什么。谁能解释一下吗? 应该能很好地告诉你基本的想法。会详细说明你所问的问题。如果向下滚动到名为“内容模式””的部分,您将找到您要查找的内容 苹果公司的基本观点是: “每个视图都有一个内容模式,用于控制视图如何根据视图几何图形的更改循环使用其内容[…]contentMode属性中的值决定是否应缩放位图以适应新的边界,还是仅将其固定到视图的一个角或边。” 视图的布局说明了其内容

我想知道下拉菜单“模式”是关于什么的?它包含“填充比例”、“方面匹配”等。到目前为止,我从未改变过它,但我很好奇它能用来做什么。谁能解释一下吗?

应该能很好地告诉你基本的想法。

会详细说明你所问的问题。如果向下滚动到名为“内容模式””的部分,您将找到您要查找的内容

苹果公司的基本观点是:

“每个视图都有一个内容模式,用于控制视图如何根据视图几何图形的更改循环使用其内容[…]contentMode属性中的值决定是否应缩放位图以适应新的边界,还是仅将其固定到视图的一个角或边。”

视图的布局说明了其内容应该如何布局。在界面生成器中,可以在属性检查器中选择各种模式

让我们使用两个图像视图来了解各种模式是如何工作的

按比例填充

图像高度和宽度被拉伸以匹配
UIImageView
的大小

方面匹配

将拉伸图像的最长边(高度或宽度)以匹配视图。这使得图像尽可能大,同时仍然显示整个图像,并且不会扭曲高度或宽度。(我将
UIImageView
背景设置为蓝色,以便其大小清晰。)

方面填充

将拉伸图像的最短边(高度或宽度)以匹配视图。与“纵横比匹配”一样,图像的比例不会从其原始纵横比扭曲

重画

重画仅适用于需要自行缩放和调整大小的自定义视图。我们没有使用自定义视图,所以不应该使用重画。请注意,这里的
UIImageView
只提供了与Scale to Fill相同的结果,但它在幕后做了更多的工作

关于重画,报告说:

内容模式有助于回收视图的内容,但也可以将内容模式设置为在缩放和调整大小操作期间特别希望自定义视图重新绘制自身时的值。将视图的内容模式设置为该值将强制系统调用视图的
drawRect:
方法以响应几何体更改。通常,应尽可能避免使用此值,当然也不应将其用于标准系统视图

居中

图像在视图中居中,但不会拉伸图像的长度和宽度

顶部

图像的上边缘水平居中于视图顶部,并且图像的长度和宽度不会拉伸

底部

图像的底部边缘水平居中于视图底部,并且图像的长度和宽度不会拉伸

左边

图像的左边缘垂直居中于视图的左侧,并且图像的长度和宽度不会拉伸

赖特

图像的右边缘垂直居中于视图右侧,并且图像的长度和宽度不会拉伸

左上角

图像的左上角放置在视图的左上角。图像的长度和宽度不会拉伸

右上角

图像的右上角放置在视图的右上角。图像的长度和宽度不会拉伸

左下角

图像的左下角放置在视图的左下角。图像的长度和宽度不会拉伸

右下角

图像的右下角放置在视图的右下角。图像的长度和宽度不会拉伸

笔记
  • 如果内容(在本例中为图像)与视图(在本例中为
    UIImageView
    )大小相同,则更改内容模式不会产生明显的差异

  • 有关非
    UIImageView
    视图的内容模式的讨论,请参阅和提问

  • 在Swift中,要设置以编程方式设置内容模式,请执行以下操作:

    imageView.contentMode = UIViewContentMode.ScaleToFill
    imageView.contentMode = UIViewContentMode.ScaleAspectFit
    imageView.contentMode = UIViewContentMode.ScaleAspectFill
    imageView.contentMode = UIViewContentMode.Redraw
    imageView.contentMode = UIViewContentMode.Center
    imageView.contentMode = UIViewContentMode.Top
    imageView.contentMode = UIViewContentMode.Bottom
    imageView.contentMode = UIViewContentMode.Left
    imageView.contentMode = UIViewContentMode.Right
    imageView.contentMode = UIViewContentMode.TopLeft
    imageView.contentMode = UIViewContentMode.TopRight
    imageView.contentMode = UIViewContentMode.BottomLeft
    imageView.contentMode = UIViewContentMode.BottomRight
    

所以它只适用于UIImageView?为什么它可以用于所有UIView?它实际上是从UIView派生的。查看官方文件。是的,我读了所有这些,我知道它来自UIView,但我从来没有看到任何改变模式的效果。因此我的问题是:当我不处理UIImageView时,我会看到任何效果吗?非常详细的解释。我在这里看到的所有示例都是关于
UIImageView
的,但苹果在
UIView
上公开了该属性;这就是造成混乱的原因。@Krumelur,在我完成我的回答并重新阅读你的问题和评论后,我有了答案。有一些很好的解释,非常好的解释。看到所有的可视示例非常有帮助。