项目加一个活动页,有的活动过期之后还要展示几天,但是显示灰色,过了某个期限之后就不予展示了。这么一个需求。给imageview加灰色图片的方法我网上查了一下用的这个:
-(UIImage *)grayImage:(UIImage *)sourceImage
{
int bitmapInfo = kCGImageAlphaNone;
int width = sourceImage.size.width;
int height = sourceImage.size.height;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate (nil, width,height,8,0,colorSpace, bitmapInfo);
CGColorSpaceRelease(colorSpace);
if (context == NULL) {
return nil;
}
CGContextDrawImage(context,
CGRectMake(0, 0, width, height), sourceImage.CGImage);
UIImage *grayImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
CGContextRelease(context);
return grayImage;
}
能达到效果,后来又来一个需求,做一个收藏列表,tableview的自定义cell内写了一个button,收藏的时候给一个心形效果,取消收藏的时候是半破碎的心形,置灰色,我用了上面的方法时,发现整个imageview的背景色也被置灰了 调了半天没调好,这时候发现了另一种方法,image的渲染方法,是这么使用的
:
-(void) updateUIForFollow:(BOOL) isFollow{
if (isFollow) {
self.belowImv.image = [UIImage imageNamed:@"new_room_half_btn_heard"];
}else{
UIImage *heartImage = [UIImageimageNamed:@"new_room_half_btn_broken_heard"];
UIImage * newHeartImage = [heartImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.belowImv setImage:newHeartImage];
self.belowImv.tintColor = COLOR_LIGHT_GRAY;
}
}
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];这个方法,是给当前的image做一个渲染效果,后面的参数是一个枚举,这个template代表始终使用前景色tintcolor来渲染,接着设置tintcolor就可以了,这样 imageview的背景色不会变灰,可以正常设置,而显示的图片是灰色的了,做个记录,以后要用到