Iphone 无透明部分的图像掩模
我已经调查了一段时间了 我想在杯子上画一个灰色的图像 目前,我正在拉伸一个带有灰色背景的uiimageview,使其达到滑块的大小Iphone 无透明部分的图像掩模,iphone,ios,xcode,ipad,Iphone,Ios,Xcode,Ipad,我已经调查了一段时间了 我想在杯子上画一个灰色的图像 目前,我正在拉伸一个带有灰色背景的uiimageview,使其达到滑块的大小 -(void) sliderChanged:(CGFloat) value{ drinksView.grayArea.frame = CGRectMake( 0 , -value ,372 ,value); 我知道这很肮脏,不是我想要的 我想要的是灰色部分仅覆盖有杯子的部分(例如图像不透明的部分)。杯子的图像只是有一个透明的背景 有人知道如何做到这一点吗?我是一
-(void) sliderChanged:(CGFloat) value{
drinksView.grayArea.frame = CGRectMake( 0 , -value ,372 ,value);
我知道这很肮脏,不是我想要的
我想要的是灰色部分仅覆盖有杯子的部分(例如图像不透明的部分)。杯子的图像只是有一个透明的背景
有人知道如何做到这一点吗?我是一个戴着面具的傻瓜,很多教程都让我一无所获,我甚至不知道这是否可能
注:无法在杯子周围绘制路径,因为杯子图像可能会变为玻璃首先,您需要熟悉此方法
// masks the item based on the MaskImage
- (UIImage*) itemMask : (UIImage*)image withMask:(UIImage*)maskImage
{
UIImage* afterMasking = nil;
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);
CFRelease(mask);
afterMasking = [UIImage imageWithCGImage:masked];
CFRelease(masked);
return afterMasking;
}
它的作用是,你把你的杯子图像和面具图像放在一起,它会遮住你的杯子图像。它只会掩盖你的杯子形象,下面什么都没有,所以你不必担心
您遇到的问题是,灰色框会调整大小。我的方法是根据滑块值裁剪遮罩。因此,制作一个黑匣子,并改变它的大小,在你通过这个方法输入它之前,你是如何处理灰度背景的。这样做应该很快,所以我不会详细说明,但最后你会有这样的东西。请原谅那些不太精细的图形
我能想到的最简单的方法就是用一个蒙面炉。这是您需要做的:
UIImageView
,而是使用灰色背景的CALayer
作为覆盖层。您的幻灯片更改:
方法将保持不变,除了drinksView.grayArea
将是一个层而不是一个视图灰色区域的遮罩。请执行以下操作:
CALayer * maskLayer = [CALayer new];
maskLayer.contents = myCupImage.CGImage;
grayArea.mask = maskLayer;
contentsGravity
设置为,例如,kCAGravityTop
来解决此问题灰色区域设置固定边框(等于杯子图像的大小)
灰色区域
,不如为其引入容器层:
CALayer * container = [CALayer new];
container.masksToBounds = YES;
[container addSublayer:grayArea];
[drinksView.layer addSublayer:container];
幻灯片更改:
中,更改容器的框架,而不是灰色区域
希望这能起作用。这很有效,我会在底部发布我的最终代码,因为它确实需要一些增强。由于第一个答案对我很有效,我没有尝试这个(固定价格项目),无论如何谢谢你的努力
drinksView.grayLayer = [CALayer new];
drinksView.grayLayer.frame = CGRectMake(0, 0, 372, 0);
drinksView.grayLayer.contentsGravity = kCAGravityTop;
CALayer * topLayer = [CALayer new];
topLayer.frame = CGRectMake(0, 0, 372, 367);
UIImage * grayImage = [UIImage imageNamed:@"grayDrink.png"];
topLayer.contents = (id) grayImage.CGImage;
CALayer * maskLayer = [CALayer new];
maskLayer.contents = (id)cupImage.CGImage;
maskLayer.masksToBounds = YES;
maskLayer.bounds = CGRectMake(0, 0, 372, 367);
maskLayer.position = CGPointMake(186,184);
[topLayer setMask:maskLayer];
[drinksView.grayLayer addSublayer:topLayer];
[drinksView.grayLayer setMasksToBounds:YES];
[[drinksView layer]addSublayer:drinksView.grayLayer];