ここ数日、方法を見つけようとしましたが、行き詰まっています。私のアプリケーションの特定の時点で、2 つの UIImage をオーバーレイしたいと思います。最初のレイヤーで「描画」を開始すると、画像が消去され、下のコンテンツを表示できるようになります。
コア グラフィックスのやり方がわからないので、ネットで何日も過ごした後、それが可能かどうか疑問に思っています。
私を助けてくれる人、または私が従うべき方向を教えてくれる人はいますか?
どんな助けでも大歓迎です。
良い1日を。
ここ数日、方法を見つけようとしましたが、行き詰まっています。私のアプリケーションの特定の時点で、2 つの UIImage をオーバーレイしたいと思います。最初のレイヤーで「描画」を開始すると、画像が消去され、下のコンテンツを表示できるようになります。
コア グラフィックスのやり方がわからないので、ネットで何日も過ごした後、それが可能かどうか疑問に思っています。
私を助けてくれる人、または私が従うべき方向を教えてくれる人はいますか?
どんな助けでも大歓迎です。
良い1日を。
1 つの ScratchView クラスを作成し、次のように initMethod に Scratch イメージを配置します。
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
scratchable = [UIImage imageNamed:@"scratchable.jpg"].CGImage;
width = CGImageGetWidth(scratchable);
height = CGImageGetHeight(scratchable);
self.opaque = NO;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();
CFMutableDataRef pixels = CFDataCreateMutable( NULL , width * height );
alphaPixels = CGBitmapContextCreate( CFDataGetMutableBytePtr( pixels ) , width , height , 8 , width , colorspace , kCGImageAlphaNone );
provider = CGDataProviderCreateWithCFData(pixels);
CGContextSetFillColorWithColor(alphaPixels, [UIColor blackColor].CGColor);
CGContextFillRect(alphaPixels, frame);
CGContextSetStrokeColorWithColor(alphaPixels, [UIColor whiteColor].CGColor);
CGContextSetLineWidth(alphaPixels, 20.0);
CGContextSetLineCap(alphaPixels, kCGLineCapRound);
CGImageRef mask = CGImageMaskCreate(width, height, 8, 8, width, provider, nil, NO);
scratched = CGImageCreateWithMask(scratchable, mask);
CGImageRelease(mask);
CGColorSpaceRelease(colorspace);
}
return self;
}
また、Scratch 後に背景の画像を表示するための 2 つ目のビュー クラスを作成します。
以下の例は、これを試すのに非常に役立ちます:-
https://github.com/oyiptong/CGScratch