close

當我們在寫程式時,總會出現不敷使用的時候,比如說,objective-c提供的UIImage雖然有辦法可以將圖片縮小,但並沒有可以直接使用的方法。

 

// 產生一個image實體,假設IMG_NAME這張圖的大小是600*600;我們要將他縮小成200*200

UIImage* myImage = [UIImage imageNamed:@"IMG_NAME"];

UIGraphicsBeginImageContext(CGSizeMake(200, 200));

[myImage drawInRect:CGRectMake(0, 0, 200, 200)];

myImage = UIGraphicsGetImateFromCurrentImageContext();

UIGraphicsEndImageContext();

 

以上是完成一個縮小圖片的動作。然而每次要用到縮圖時都要再寫一次這些冗長的程式碼,很不方便;若繼承原UIImage,又覺得小提大作,不是這麼的直覺。

 

Objective-C提供了一個方便的語法,叫做Category,讓開發者可以自行擴充原生類別裡的方法,卻又不必使用繼承的寫法。

我們一樣產生.h跟.m檔案,命名規則為 "原Class+Category方法名"。在這個例子我們命名為:UIImage+Resize。

UIImage+Resize.h

#import <UIKit/UIKit.h>

@interface UIImage (Resize)

- (UIImage *)reSizeImageToSize:(CGSize)reSize;

@end

 

UIImage+Resize.m

#import "UIImage+Resize.h"

@implementation UIImage (Resize)

- (UIImage *)reSizeImageToSize:(CGSize)reSize

{    

    UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height));

    [self drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];

    UIImage *reSizeImage = UIGraphicsGetImateFromCurrentImageContext();

    UIGraphicsEndImageContext();

 

    return reSizeImage;

}

 

完成了UIImage的Catetory之後, 記得在自己的程式裡面import UIImage+Resize.h,然後就可以用了。

UIImage* myImage = [UIImage imageNamed:@"IMG_NAME"];

[myImage reSizeToSize:CGSizeMake(200, 200)];

這樣就完成圖片縮放的動作了,使用方便而且畫面乾淨。

 

在新增自己的category時要注意,若新增的方法名稱跟原本存在的方法撞名時,會以category為主,因此在新增自己的category最好是加些綴字來避免這類的事發生。

arrow
arrow
    全站熱搜

    Eason 發表在 痞客邦 留言(0) 人氣()