2012-12-31 48 views
0

我很少試圖用CoreGraphics學習新東西。我有一個下面的代碼,圖像沒有使用drawInRect函數設置。UIImage的drawInRect不起作用

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    imgView=[[UIImageView alloc]init]; 
    [self drawRect:CGRectMake(10, 10, 20, 20)]; 


} 


- (void)drawRect:(CGRect)rect { 
    UIImage *img = [UIImage imageNamed:@"RoseBunch.jpeg"]; 

    UIGraphicsBeginImageContext(CGSizeMake(320, 480)); 

    [img drawInRect:CGRectMake(0, 0, 50, 50)]; 
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
    imgView.image=resultingImage; 
} 

這是怎麼回事?爲什麼它不工作?任何人都可以解釋我?

+0

其實你的drawRect沒有被調用。嘗試在其中設置一個breakPoint,看看你的自我。 爲了在視圖中繪製,您需要繼承它並覆蓋drawRect方法。 – Lefteris

+0

另外,在繪製drawRect方法時,不需要創建自己的畫布。您繼承的視圖將爲您提供畫布,因此您不需要開始和結束圖像上下文。 – Lefteris

回答

1

drawInRect方法僅適用於在the documentation中編寫的當前圖形上下文。

的事情是你是不是在當前圖形上下文繪圖,因爲你使用:

UIGraphicsBeginImageContext(CGSizeMake(320, 480)); 

我建議你嘗試類似的東西:

UIImage *img = [UIImage imageNamed:@"RoseBunch.jpeg"]; 
CGContextRef c = UIGraphicsGetCurrentContext(); 
[img drawInRect:CGRectMake(0, 0, 50, 50)]; 

CGImageRef contextImage = CGBitmapContextCreateImage(c); 
UIImage *resultingImage = [UIImage imageWithCGImage:contextImage]; 
imgView.image=resultingImage; 
CGImageRelease(contextImage); //Very important to release the contextImage otherwise it will leak. 

一兩件事是非常重要的:您不應該在繪圖方法中加載圖像,因爲每次調用繪圖函數時都會加載圖像。

+1

這在swift中會是什麼樣子? – shoe

相關問題