start
最近略忙啊。。。于是blog稍微暂停了一段时间啊,好吧今天来个短小精干的,说说最近遇到的一个问题了,其实可能大家都遇到过了,一个比较普通的问题,在使用Resizable Image和Stretchable Image的时候,出现透明线的问题。
问题观察和分析
iOS开发过程中啊,我们经常用到的一个东西就是Resizable Image或者叫Stretchable Image的图像,我来粗糙翻译下可以拉伸的图像,用来填充我们的界面,为啥呢,因为一个可以拉升的图像,我们只需要指定需要从那个位置开始拉升,那么我们就能使用一个图片,创造一堆不同大小的控件了。
观察
扯了好多闲,我们来看看到底是啥样的吧,因为,好麻烦不打算开demo了,于是我选择附上so转载图片的连接,并无耻的使用提问者的图片,SO问题原链,这篇原链上,大神们的讨论也解决了这个问题。
虽说是截了别人图片我还是很厚道的加了点标注,重新创造了下,上面本来不应该会有的东西就是那几条跟消息气泡颜色不同的线了。
分析
我先总结下大神说了啥,对于这个问题怎么破除:
- 这是iOS7上的bug,怪不得我看iOS6怎么妥妥的。。。(其实是我打开方式不对)
- 这是因为啊,我们的图像最终绘制的地方,长宽不是偶数(真蛋疼-,-我总觉得是RP问题)
- 图像的长宽是浮点数,也就是说只能是整数,不能有小数
只要做到上面三个,那就消灭了这些万恶的线了。
分析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
- 公众号主要发一些开发相关的技术文章
- 谈谈自己对技术的理解,经验
- 也许会谈谈人生的感悟
- 本人不是很高产,但是力求保证质量和原创