您好,欢迎访问一九零五行业门户网

iOS开发百问(4)

32、uiimage+scale缩放图片
uiimage可以加载图片,但是我们想要得到一张缩小或放大的图片,利用uiimage不能做到,下面我们添加一个uiimage的分类,用来实现uiimage中图片的放大和缩小。
首先,创建一个uiimage+scale类。
然后,实现该类的方法:
#import <uikit/uikit.h> @interface uiimage (scale) -(uiimage*)scaletosize:(cgsize)size; @end #import "uiimage+scale.h" @implementation uiimage (scale) -(uiimage*)scaletosize:(cgsize)size { // 创建一个bitmap的context // 并把它设置成为当前正在使用的context uigraphicsbeginimagecontext(size); // 绘制改变大小的图片 [self drawinrect:cgrectmake(0, 0, size.width,size.height)]; // 从当前context中创建一个改变大小后的图片 uiimage* scaledimage = uigraphicsgetimagefromcurrentimagecontext(); // 使当前的context出堆栈 uigraphicsendimagecontext(); // 返回新的改变大小后的图片 return scaledimage; } @end
最后,就是该类的使用了:
#import "uiimage+scale.h" [[uiimage imagenamed:”p.png”] scaletosize:cgsizemake(252.0f,192.0f)];
33、coreplot:在散点图中,legendtitleforbarplot不会被调用
legendtitleforbarplot是柱状图的数据源方法,在散点图的数据源委托cptscatterplotdatasource 中没有该方法。要定制 legend 的标题,唯一的方法是指定plot 的 title 属性。如果 title 为空,则使用 identifier 属性。
34、 sethidesbackbutton不能隐藏返回按钮
将sethidesbackbutton:animated:移到 viewdidappear: 方法,而不要在 viewwillappear:或者viewdidload方法中。
35、cannotfind protocol declaration nsurlconnectiondelegate
ios5开始nsurlconnectiondelegate被deprecated,在nsurlconnection.h中,这些方法变成了非正式协议。同时复制了一份这些方法的拷贝到正式协议nsurlconnectiondatadelegate中。你可以直接将类接口声明的<nsurlconnectiondelegate>删除,并实现这些方法,从而使用非正式协议。
36、警告“property'ssynthesized getter follows cocoa naming convention for returning 'owned'objects”
要synthesized的属性中,属性名不得以“new”开头,比如“newfeature”。
37、 implicit declaration of function 'xxx' is invalidin c99
这是xcode的一个bug。当编译器第一次看见函数定义,却未找到该函数原型时会报此错误。解决方法是在函数定义之前加入函数原型声明。注意,把函数原型声明语句插入到类的interface声明内(.h头文件),或者的类implementation语句之前(.m文件)。
38、-[uiimageresizableimagewithcapinsets:]: unrecognized selector
这个方法是ios5中新增的,在ios4中请使用stretchableimagewithleftcapwidth:topcapheight:方法。代码:
if([img respondstoselector:@selector(resizableimagewithcapinsets:)]) {//for ios 5+ img=[srcimg resizableimagewithcapinsets:uiedgeinsetsmake(0, 6, 0, 6)]; }else{//ios 4 compatibility img=[srcimg stretchableimagewithleftcapwidth:6 topcapheight:0]; }
39、计算指定字体的字符串size
cgsizemaximumlabelsize = cgsizemake(250 ,maxfloat); cgsizeexpectedlabelsize = [label.text sizewithfont:[uifontsystemfontofsize:uilabel.font] constrainedtosize:maximumlabelsize linebreakmode:uilinebreakmodewordwrap];
expectedlabelsize即根据字体、最大size限制、换行模式计算出来的实际size。
40、asihttprequestcleardelegateandcancel方法导致程序崩溃
asihttprequest并不会持有delegate对象,当你取消一个request或delegate释放后,为了避免调用释放了的delegate方法,我们应当取消request。但是cleardelegateandcancel方法会导致一个调用deallocated对象错误并崩溃。
为了避免这个,你应当(针对1.8.1及之前的版本):
在delegate中持有asihttprequest对象;
当释放delegate或取消request时,使用不要调用cleardelegateandcancel而改用“[requestrelease],request=nil;”。
41、 castof 'int' to 'camediatimingfunction *' is disallowed with arc
以下代码导致上述错误:
transition.timingfunction= uiviewanimationcurveeaseinout;
事实上,就算在mrc(手动内存管理)中,这句代码也是不正确的。之所以能够不出错,是因为uiviewanimationcurveeaseinout通常为0,转换过来就变成了nil。实际上这句代码应该修改为:
[animationsettimingfunction:[camediatimingfunctionfunctionwithname:kcamediatimingfunctioneaseineaseout]];
以上就是ios开发百问(4)的内容。
其它类似信息

推荐信息