當我們在寫程式時,總會出現不敷使用的時候,比如說,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最好是加些綴字來避免這類的事發生。
留言列表