2012-12-16 44 views
0

我使用CGImageMaskCreate創建一個蒙版圖像,它在第一次被調用時工作正常。但是,如果從drawRect第二次調用相同的函數,則創建的蒙版圖像爲空。繪製矩形已經跑三圈掩蓋UIImage兩次導致一個空的圖像

- (void)drawRect:(CGRect)rect{  
UIImage *maskImage = [UIImage imageNamed:@"circle.png"]; //This will be replaced  
UIImage *maskedImage = [self maskImage:_selectedImage withMask:maskImage];  
_selectedImage = maskedImage;  
[_selectedImage drawInRect:rect];      
} 

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 
    CGImageRef maskRef = maskImage.CGImage; 
    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
            CGImageGetHeight(maskRef), 
            CGImageGetBitsPerComponent(maskRef), 
            CGImageGetBitsPerPixel(maskRef), 
            CGImageGetBytesPerRow(maskRef), 
            CGImageGetDataProvider(maskRef), NULL, false); 
    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
    UIImage *result = [UIImage imageWithCGImage:masked]; 
    NSLog(@" MASK >> RETURNING %@ %f %f", 
      result.description, result.size.width, result.size.height); 
return result; 
} 

後日志的輸出

MASK >> RETURNING UIImage: 0x903d720 320.000000 480.000000 
MASK >> RETURNING UIImage: 0x73660c0 0.000000 0.000000 
MASK >> RETURNING UIImage: 0x90f7390 0.000000 0.000000 

所以它看起來像蒙面圖像被稱爲第二時間後空。

幫助會很好,這是我的第一個IOS應用程序,所以也許這是明顯的。

+0

你知道嗎?我看到了同樣的行爲。 – Liron

回答

0

我認爲這是你的程序邏輯:

起初,_selectedImage是空的。因此,面具創建一個圓圈。

現在你的_selectedImage已經包含該圈子。所以第二次你的圈子會被面具清零。

- >預期行爲。如果您沒有想到,也許您想閱讀Core Graphics屏蔽功能。