方法一:

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight



这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是不拉伸区域和左边框的宽度,第二个参数是不拉伸区域和上边框的宽度。


第一次用这个函数的时候一直搞不懂为什么只要两个参数就行,至少应该指定左上角和右下角,总共四个参数啊。后来读读文档才明白,只需要两个参数就行了。



参数的意义是,如果参数指定10,5。那么,图片左边10个像素,上边5个像素。不会被拉伸,x坐标为11和一个像素会被横向复制,y坐标为6的一个像素会被纵向复制。注意:只是对一个像素进行复制到一定宽度


方法二:


假设图片为60*24


ios 申请保存相册权限_图片保护


 图片整个高度-顶端盖高度-底端盖高度=图片中间要拉伸的部分.高度

 图片整个宽度-左端盖宽度-右端盖宽度=图片中间要拉伸的部分.宽度

图片要拉伸,就拉伸最中间的2*2,这样可以确保图片不变形

UIImageResizingMode枚举值参数,用来指定拉伸的模式:

  • UIImageResizingModeStretch:拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片
  • UIImageResizingModeTile:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图片

方法三:使用images.xcassets,使用Xcode中Asset Catalog的slice和dice,我们不需要代码也能拉伸图片。首先在Xcode中选中图片,然后点击右下角的Show Slicing:






ios 申请保存相册权限_图片保护_02


你现在应该能看到slicing 面板和一个按钮"Start Slicing"。




ios 申请保存相册权限_ci_03


在你点击按钮之后,会显示下面的三个选项:


ios 申请保存相册权限_图片拉伸不变形_04


左边的按钮用于horizontal edge insets,右边的按钮用于vertical edge insets,中间的则是两个都有。在我们的例子中要保留圆角,所以我们按中间的按钮,告诉系统我们想要按钮的中间在水平和垂直方向拉伸。在按下按钮之后,就能看到一些可以拖动的细条,这可以设置从哪里开始拉伸图片。最后别忘了在Attribtues pane中设置图片是可拉伸的。












ios 申请保存相册权限_图片保护_05






也许我们不用再在resizableImageWithCapInsets方法中填写那些麻烦的数字了,方便好用。