2013-06-23 40 views
0

我发现此代码here,但我不确定如何使用它。使用UIImage作为掩码来填充不同的颜色

- (void)drawRect:(CGRect)rect 
{ 
    CGRect bounds = [self bounds]; 
    [[UIColor blackColor] set]; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextClipToMask(context, bounds, [myImage CGImage]); 
    CGContextFillRect(context, bounds); 
} 

上午我继承一个UIImage? drawRect在哪里需要被调用?谢谢

+0

子类'UIView'获得'drawRect:'工作。系统会在需要时调用'drawRect:'。无需手动调用它。 – Till

+0

所以,当我初始化我的UIImage时,我该如何去使用我的UIView子类? – davis

+0

不知道如果我得到你的问题,但你通常会初始化视图初始化程序('initWithFrame'和/或'initWithCoder')中的图像('myImage')。 – Till

回答

0

希望能帮助你。

#pragma mark - Fill color To Image 
-(void)fillColorToImage:(SelectedObject *)obj Color:(UIColor *)tintColor{ 
UIGraphicsBeginImageContextWithOptions(obj.image.size, NO, 0.0f); 
[tintColor setFill]; 
CGRect bounds = CGRectMake(0, 0, obj.image.size.width, obj.image.size.height); 
UIRectFill(bounds); 
[obj.image drawInRect:bounds blendMode:kCGBlendModeDestinationIn alpha:1.0]; 
imgFillColor = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, obj.frame.size.width, obj.frame.size.height)]; 
imgFillColor.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[self.view addSubview:imgFillColor]; 
// [self.view addSubview:imgVw]; 
imageview.image = [self maskImage:imageview.image withMask:imgFillColor.image]; 
[self.view addSubview:btnNav]; 
} 
#pragma mark - mask 
- (UIImage*) maskImage:(UIImage *) image withMask:(UIImage *) mask 
{ 
CGImageRef imageReference = image.CGImage; 
CGImageRef maskReference = mask.CGImage; 

CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference), 
             CGImageGetHeight(maskReference), 
             CGImageGetBitsPerComponent(maskReference), 
             CGImageGetBitsPerPixel(maskReference), 
             CGImageGetBytesPerRow(maskReference), 
             CGImageGetDataProvider(maskReference), 
             NULL, // Decode is null 
             YES // Should interpolate 
             ); 

CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask); 
CGImageRelease(imageMask); 

UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference]; 
CGImageRelease(maskedReference); 

return maskedImage; 
} 
+0

链接的解决方案,我发现这[[answer](http://stackoverflow.com/a/4630136/873546))更有效,因为它创建了一个UIImage类别,并允许需要访问的其他UIImage方法。 – davis