UIView 的contentMode
内容模式
一个视图向它自身绘图,相对于只有背景颜色和子视图,它还有内容。这意味着每当视图被调整大小它的contentMode
属性就变得非常重要。正如我之前提到的,绘图系统会尽可能避免重头开始绘制视图。相反,绘图系统将使用之前绘图操作的缓存结果(位图回填)。所以,如果视图被重新调整大小,系统可能简单的伸缩或重定位缓存绘图,前提是你的contentMode
设置指令是是这样设置的。
通常我们的视图的contentMode
属性需要与视图绘制自己的方式一致。假设我们的drawRect:
方法中的代码让箭头的尺寸和位置相对于视图的边界原点,即它的左上方。所以我们可以设置它的contentMode
为UIViewContentModeTopLeft
。又或者,我们可以将contentMode
设置为UIVIewContentModeRedraw
,这将引起缓存内容的自动缩放和重定位被关闭,最终结果是视图的setNeedsDisplay
方法将被调用,触发drawRect:
方法重绘视图内容。
在另一方面,如果一个视图只是暂时被调整大小。假设是作为动画的一部分,那么伸缩行为正是你所想要的。假设我们的动画是想要让视图变大然后还原回原始大小以达到作为吸引用户的一种手段。这就需要视图伸缩的时候视图的内容也跟着伸缩,正确的contentMode
的值是UIViewContentModeScaleToFill
,被伸缩的内容仅仅是视图内容的一副缓存图片,所以它运行起来十分的高效。
总结
1 | UIViewContentModeScaleToFill : 图片拉伸至填充整个UIImageView(图片可能会变形) |