如何实现对view的遮罩

2025-05-08 07:33:09
推荐回答(1个)
回答1:

给你两个方法,先制造一个灰度背景,然后再生成彩色图片
- (UIImage *)getGrayImage:(UIImage*)image {
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
// 创建gray的CGColorSpaceRef
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// 创建CGContextRef
CGContextRef
context = CGBitmapContextCreate(nil, image.size.width,
image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
CGContextDrawImage(context, imageRect, [image CGImage]);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *grayImage = [UIImage imageWithCGImage:imageRef];
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
CFRelease(imageRef);

return grayImage;
}

- (UIImage *)getShowImage:(UIImage *)image size:(CGSize)size direction:(int)direction {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef
context = CGBitmapContextCreate(nil, size.width, size.height, 8, 0,
colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);

CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
if (direction == 1) {
//上面空白
imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
} else if (direction == 2) {
//左面空白
imageRect = CGRectMake(size.width-image.size.width, 0, image.size.width, image.size.height);
}

CGContextDrawImage(context, imageRect, [image CGImage]);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *showImage = [UIImage imageWithCGImage:imageRef];
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
CFRelease(imageRef);

return showImage;
}

你看看吧,弄一下,这个功能我原来弄过。圆形可以用imageView实现
imageView.layer.masksToBounds = YES;
imageView.layer.cornerRadius = 40.0f; // 半径根据imageView大小一半儿设定