ユーザーが画面上で画像と uilabel を移動できる場所があります。黒い画像と黒いテキストだとします。画像と重なる部分の文字を透明にして、背景が透けて元は同じ色なのに文字が読めるようにしたい。うまくいけば、これは理にかなっています。
タッチによる消去に関するリンクがいくつか見つかりました。重複するテキストの部分でこれを自動化する方法がわかりません。
たぶん、この「画像で画像をマスキングする」のようなものですか? https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html
画像(およびテキスト)を移動する方法は次のとおりです
-(void)graphicMoved:(UIPanGestureRecognizer *)recognizer
{
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}
追加されたコード テキストと画像を部分的に重ねて配置した後、ボタンのクリックで creatAlphaClippedImage を呼び出しています。画像は imageMerge で、ラベルは labelTest です。
私がすることは、最初にそれらを割り当て、次に最後に出力画像を取得し、それを imageMerge.image に割り当てることです。これは、テストのために隅にインターフェースビルダーを使用してビューに追加されます。nslog に何を表示すべきかわかりませんが、空ではありません。
-(void)createAlphaClippedImage {
UIImageView *imageView = nil;//this will b your imageView, property that u are holding to
UILabel *label = nil;//this will be your label, property that u are holding to
imageView=imageMerge;
label=labelTest;
if (CGRectIntersectsRect(imageView.frame, label.frame)) {
UIImage *bottomImage = imageView.image;
UIImage *image = nil;
UIGraphicsBeginImageContextWithOptions(bottomImage.size, NO, 0.0);
CGRect imageRect = CGRectMake(0.0f, 0.0f, bottomImage.size.width, bottomImage.size.height);
[bottomImage drawInRect:imageRect];
//the color that u want the text to have
[[UIColor clearColor] set];
//change this textRect to change the position of text on image
CGRect textRect = CGRectMake(CGRectGetMinX(label.frame) - CGRectGetMinX(imageView.frame), CGRectGetMinY(label.frame) - CGRectGetMinY(imageView.frame), CGRectGetWidth(label.frame), CGRectGetHeight(label.frame));
[label.text drawInRect:textRect withFont:label.font];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image = image;
imageMerge.image=image;
NSLog(@"ImageMerge %@\n",imageMerge.image);
}
}