iOS进阶iOS CollectioniOS_小蟹专题

在 iOS 开发中如何优雅地进行图片缩放?

2016-03-05  本文已影响7790人  Joy___

对于图片拉伸是移动开发中很常见的需求,在前一阵子做项目中需要做一个类似于QQ聊天气泡,这个气泡会根据文字的多少而变化,当时有了三种方案:

来分析一下这三种做法利弊:

代码实现图片缩放

至于 iOS 5 之类的方法,这里就不再谈了。在 iOS 6 的时候,系统为我们提供了这样一个方法

    public func resizableImageWithCapInsets(capInsets: UIEdgeInsets, resizingMode: UIImageResizingMode) -> UIImage

对于拉伸的方式,有以下两种:

拉伸模式

来做四个测试,假如我们的原始图像尺寸为60*128当我们设置capInsets为以下四种值的时候有什么样子的效果:

在一个180*384的窗口进行测试图像,对于实践的结果,可以在这个地址中看到。

四种测试结果是:

效果图4

平铺模式

与上面的场景相同,只不过不再拉伸,改为平铺的方式,来尝试以下四种情况:

在一个180*384的窗口进行测试图像,对于实践的结果,可以在这个地址中看到。

结论就是:

效果5

注: 以上的代码测试来自SketchK七爷

Image Slicing 可视化缩放

何为Image Slicing呢?,其实就相当于一个可视化的resizableImageWithCapInsets,可以用于指定在图片缩放时用来填充的像素。我们可以在XcodeAssets.xcassets目录中选择要slicing的图片,点击图片界面右下方的Show Slicing按钮,在想要设定切片的图片上点击Start Slicing,将出现左中右(或者上中下)三条可以拖动的指示线,通过拖动它们来设定实际的缩放范围。

我们刚才说,他就是可视化的resizableImageWithCapInsets,那么它的capInsets在哪里呢?打开图片对应的.json文件,代码如下:

{
  "images" : [
    {
      "resizing" : {
        "mode" : "9-part",
        "center" : {
          "mode" : "tile",
          "width" : 42,
          "height" : 92
        },
        "cap-insets" : {
          "bottom" : 0,
          "top" : 95,
          "right" : 41,
          "left" : 0
        }
      },

从文件可以看出来topleftbottomright对应的就是上左下右的指示线,看到modetile,就知道Image Slicing默认为平铺缩放,对于widthHeight是做什么的呢?Width代表的是左侧线(或者上方线)和中间线之间的区域,Height代表的是上侧线和中间线之间的区域。

看一下刚才图片运行起来的效果

测试结果

很神奇呀!灰色区域都会被隐藏,我们发现灰色区域位于右侧线与中间线或者下方线与中间线之间。来分析一下各个数字的平铺:

好绕啊!还是可视化比较简单,只要手动调试一下,就可以比较直观的看到效果,希望可以帮到你,Demo可以进行下载。

上一篇 下一篇

猜你喜欢

热点阅读