知识共享许可协议本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。本文仅作为个人学习记录使用,欢迎在许可协议范围内转载或使用,请尊重版权并且保留原文链接,谢谢您的理解合作。如果您觉得本站对您能有帮助,您可以使用RSS方式订阅本站,这样您将能在第一时间获取本站信息。

start

最近略忙啊。。。于是blog稍微暂停了一段时间啊,好吧今天来个短小精干的,说说最近遇到的一个问题了,其实可能大家都遇到过了,一个比较普通的问题,在使用Resizable Image和Stretchable Image的时候,出现透明线的问题。

问题观察和分析

iOS开发过程中啊,我们经常用到的一个东西就是Resizable Image或者叫Stretchable Image的图像,我来粗糙翻译下可以拉伸的图像,用来填充我们的界面,为啥呢,因为一个可以拉升的图像,我们只需要指定需要从那个位置开始拉升,那么我们就能使用一个图片,创造一堆不同大小的控件了。

观察

扯了好多闲,我们来看看到底是啥样的吧,因为,好麻烦不打算开demo了,于是我选择附上so转载图片的连接,并无耻的使用提问者的图片,SO问题原链,这篇原链上,大神们的讨论也解决了这个问题。

问题截图

虽说是截了别人图片我还是很厚道的加了点标注,重新创造了下,上面本来不应该会有的东西就是那几条跟消息气泡颜色不同的线了。

分析

我先总结下大神说了啥,对于这个问题怎么破除:

  1. 这是iOS7上的bug,怪不得我看iOS6怎么妥妥的。。。(其实是我打开方式不对)
  2. 这是因为啊,我们的图像最终绘制的地方,长宽不是偶数(真蛋疼-,-我总觉得是RP问题)
  3. 图像的长宽是浮点数,也就是说只能是整数,不能有小数

只要做到上面三个,那就消灭了这些万恶的线了。

分析2

看了看大神说的,恍然大雾,于是想了想,改了段代码做测试,发现不对啊,还是这样,于是我开始怀疑自己的人品了,因为深深坚信SO上的大神肯定不会乱说,除了我这样的酱油会干这种事。思来想去那还是Debug把,于是调试,调试调试,发现-,-我的长宽居然有浮点数。。。思来想去思来想去,总算想到了,我的长宽是通过

sizeWithFont:constrainedToSize:lineBreakMode:

这个方法计算得到的。。。那太明显了,果断是这个方法计算出来的有小数。。。再调试后确认了想法,略微修改(ceil,round,还是其他的,大家自己处置这些老鼠屎吧),推荐ceil一下,这样可以保证如果文字计算得到的大小是0.几几几结果被round舍去了,文字就显示不全了。

其实这个是第二个问题,sizeWithFont:constrainedToSize:lineBreakMode返回的结果是浮点数,之前一直没仔细看,结果。。。

end

其实这个问题异常的简单,搜到so那篇文章的肯定都能马上解决问题,这个好像也是由于r屏幕在绘制时,拉伸像素点所引起的,这个最近还在继续的cocoa drawing guide中也看到了。

that’s all,真想说-,-写这么简单粗糙不会被人丢砖头么-,-

最后欢迎大家订阅我的微信公众号 Little Code

公众号

  • 公众号主要发一些开发相关的技术文章
  • 谈谈自己对技术的理解,经验
  • 也许会谈谈人生的感悟
  • 本人不是很高产,但是力求保证质量和原创