首頁  >  文章  >  後端開發  >  iOS開發百問(4)

iOS開發百問(4)

黄舟
黄舟原創
2017-01-20 09:29:321129瀏覽

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)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn