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中。你可以直接將類別介面聲明的
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],requestre== nil;」。
41、 Castof 'int' to 'CAMediaTimingFunction *' is disallowed with ARC
以下程式碼導致上述錯誤:
transition.timingFunction= UIViewAnimationCurveEaseInOut;
事實上,就算在MRC(手動記憶體管理)中,這句程式碼也是不正確的。之所以能夠不出錯,是因為UIViewAnimationCurveEaseInOut通常為0,轉換過來就變成nil了。實際上這句程式碼要修改為:
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
以上就是iOS開發百問(4)的內容,更多相關內容請關注PHP中文網(www.php.cn)!