放射状のグラデーションマスクを作成して、写真を見ることができるように画像に穴を作りたい。私は穴を重ね合わせた画像を作成し、画像は下に以下のような、目に見える:ラジアルグラデーションマスクを作成して画像内に穴を作成する
は、私は正常CGImageMaskCreate()
を使用して、この画像を作成することができています。しかし、iOS 10.0のCGImageMaskCreate()
の異常な動作のために、私は別の解決策を探しています。
このような解決策の1つは、UIViewのmaskView
プロパティを使用してイメージマスクを作成することです。私はmaskView
を使用して上記の画像効果を作成するためのコードを書くことができます。しかし、それは正しい結果を与えていません。
私はCore Graphicsにはあまりよくありません。多分、私はどこに間違っているのか理解できません。私のコードは次のとおりです。
CGRect rect = CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.view.bounds.size.height);
CGSize size = self.view.bounds.size;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat radius = 160.0;
CGPoint center = CGPointMake(150.0, 150.0);
CGFloat components[] = {1.0,1.0,1.0,1.0, 1.0,1.0,1.0,1.0, 1.0,1.0,1.0,1.0, 1.0,1.0,1.0,1.0, 1.0,1.0,1.0,0.5, 1.0,1.0,1.0,0.0};
CGFloat locations[] = {0.0, 0.1, 0.2, 0.8, 0.9, 1.0};
//creating bitmap context
CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrder32Big);
//creating gradient
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 6);
CGContextDrawRadialGradient(context, gradient, center, 0.1, center, radius, 0);
//get the gradient image
CGImageRef imageHole = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:imageHole];
CGGradientRelease(gradient);
//creating mask view whose alpha channels will be used for masking
UIImageView *maskImgView = [[UIImageView alloc] initWithFrame:CGRectMake(50.0, 50.0, 100.0, 100.0)];
[maskImgView setImage:img];
//This is the view on which I want to perform masking
UIImageView *mainView = [[UIImageView alloc] initWithFrame:self.view.bounds];
[mainView setImage:[UIImage imageNamed:@"insta-logo.png"]];
mainView.maskView = maskImgView;
[self.view addSubview:mainView];
この私が取得しています結果:
を使用した画像が完全に赤い色で満たされています。結果の画像をグラデーション領域で透明にして、その中を通るようにして、残った領域を他の画像の不透明度を赤色にしたいと思っています。
maskView
プロパティを使用してこのエフェクトを作成したいのですが、これは、iOS 10以降で発生するCAShapeLayer
とCGImageMaskCreate()
の異常な動作です。
どのような提案も非常に役に立ちます。 ありがとうございます。私は何を記述しているが、このようなものだと思います
"iOS 10以降で発生するCAShapeLayerとCGImageMaskCreate()の異常な動作"あなたはどういう意味ですか? – matt
CGImageMaskCreate()を使用すると、マスクは正しく作成されますが、最終的なマスクされたイメージはほぼ透明になります。私のアプリケーションでは、この問題はiPhone 7以上でのみ発生します。私はそれがiOS 10のいくつかの問題のためだと思う。 – maven25
ところで、私はこのスレッドからいくつかの助けを得たhttps://forums.developer.apple.com/thread/50854 – maven25