iOS图片拉伸的几种方法
我们知道,图片越大,读取速度越慢,占用内存更大。因此,为了节约系统资源和内存,对于简单的图片我们可以通过对小的图片进行拉伸的方法得到我们需要的大图片。
在查阅相关资料后,这里总结了几种图片拉伸的方法(在不影响显示分辨率的情况下):
- - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
- - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
- contentsCenter
- contentsGravity
其中,前两个方法是UIImage提供的独有的方法,后两个是CALayer的contents属性,适用更广。
方法一
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
适用:NS_AVAILABLE_IOS(5_0)
参考博客http://blog.csdn.net/q199109106q/article/details/8615661
方法二
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode
适用: NS_AVAILABLE_IOS(6_0)
该方法是iOS6.0对方法一的拓展,它提供了两种拉伸模式(resizingMode):UIImageResizingModeTile和UIImageResizingModeStretch,这篇博客http://www.jianshu.com/p/a577023677c1对其做了详细的介绍。
方法三
-contentsCenter
它是CALayer的一个属性,因此可以用在UIImage之外的视图。并且,工作起来的效果和UIImage里的-resizableImageWithCapInsets: 方法效果非常类似,只是它可以运用到任何寄宿图,甚至包括在Core Graphics运行时绘制的图形。
详细的讲解可参考:https://zsisme.gitbooks.io/ios-/content/chapter2/the-contents-image.html
方法四
-contentsGravity
与contentsCenter一样,它也是CALayer的contents属性。它提供了多种方式,在拉伸方面,只适用于纯色或渐变色。例如,当它的值为kCAGravityResize,垂直方向的渐变只需要提供宽度为1个像素,高度任意的原始图片,而水平方向则只需提供高度为1个像素,宽度任意的图片即可。
详细的讲解可参考:https://zsisme.gitbooks.io/ios-/content/chapter2/the-contents-image.html