发布于 2016-03-07 03:53:08 | 212 次阅读 | 评论: 0 | 来源: 分享
iOS苹果移动操作系统
苹果iOS是由苹果公司开发的移动操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等产品上。
对于图片拉伸是移动开发中很常见的需求,在前一阵子做项目中需要做一个类似于QQ
聊天气泡,这个气泡会根据文字的多少而变化,当时有了三种方案:
drawRect
方法,使用贝赛尔曲线画一个气泡API
对图片进行局部拉伸来分析一下这三种做法利弊:
drawRect
的使用带来离屏渲染,如果滑动聊天界面将使内存急剧增加,同时我也不会使用贝赛尔曲线,呜呜!至于 iOS 5 之类的方法,这里就不再谈了。在 iOS 6 的时候,系统为我们提供了这样一个方法
public func resizableImageWithCapInsets(capInsets: UIEdgeInsets, resizingMode: UIImageResizingMode) -> UIImage
对于拉伸的方式,有以下两种:
IUIImageResizingModeStretch
:拉伸模式,通过拉伸UIEdgeInsets
指定的矩形区域是我们要保护的区域,也就是不被拉伸的区域UIImageResizingModeTile
:平铺模式,通过重复显示UIEdgeInsets
指定的矩形区域是要保护的区域,也就是不被重复显示的区域来做四个测试,假如我们的原始图像尺寸为60*128
当我们设置capInsets
为以下四种值的时候有什么样子的效果:
capInsets
参数为UIEdgeInsetsMake(0, 0, 0, 0)
capInsets
参数为UIEdgeInsetsMake(42, 0, 0, 0)
capInsets
参数为UIEdgeInsetsMake(0, 20, 0, 0)
capInsets
参数为UIEdgeInsetsMake(42, 20, 42, 20)
在一个180*384
的窗口进行测试图像,对于实践的结果,可以在这个地址中看到。
四种测试结果是:
与上面的场景相同,只不过不再拉伸,改为平铺的方式,来尝试以下四种情况:
capInsets
参数为UIEdgeInsetsMake(0, 0, 0, 0)
capInsets
参数为UIEdgeInsetsMake(42, 0, 0, 0)
capInsets
参数为UIEdgeInsetsMake(0, 20, 0, 0)
capInsets
参数为UIEdgeInsetsMake(42, 20, 42, 20)
在一个180*384
的窗口进行测试图像,对于实践的结果,可以在这个地址中看到。
结论就是:
注: 以上的代码测试来自SketchK七爷
何为Image Slicing
呢?,其实就相当于一个可视化的resizableImageWithCapInsets
,可以用于指定在图片缩放时用来填充的像素。我们可以在Xcode
的Assets.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
}
},
从文件可以看出来top
、left
、bottom
、right
对应的就是上左下右的指示线,看到mode
为tile
,就知道Image Slicing
默认为平铺缩放,对于width
与Height
是做什么的呢?Width
代表的是左侧线(或者上方线)和中间线之间的区域,Height
代表的是上侧线和中间线之间的区域。
看一下刚才图片运行起来的效果
很神奇呀!灰色区域都会被隐藏,我们发现灰色区域位于右侧线与中间线或者下方线与中间线之间。来分析一下各个数字的平铺:
好绕啊!还是可视化比较简单,只要手动调试一下,就可以比较直观的看到效果,希望可以帮到你,Demo可以进行下载。