10

我正在寻找一种能够从屏幕上擦除 UIImageView 的方法。当我说擦除我的意思不是[imageView removeFromSuperview];,我的意思是通过在屏幕上涂写你的手指来擦除部分图像。无论你的手指在哪里,那都是图像中被擦除的部分。我只是找不到任何帮助。

我想图像与石英有关吗?如果是这样,那我真的不擅长。:(

我想最好的例子是彩票。一旦你刮开票的一部分,它下面的那个区域就会显露出来。有谁知道如何做到这一点?

谢谢!

更新:

下面的代码就是诀窍。谢谢!

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    lastTouch = [touch locationInView:canvasView];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    currentTouch = [touch locationInView:canvasView];

    CGFloat brushSize = 35;
    CGColorRef strokeColor = [UIColor whiteColor].CGColor;

    UIGraphicsBeginImageContext(scratchView.frame.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [canvasView.image drawInRect:CGRectMake(0, 0, canvasView.frame.size.width, canvasView.frame.size.height)];
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineWidth(context, brushSize);
    CGContextSetStrokeColorWithColor(context, strokeColor);
    CGContextSetBlendMode(context, kCGBlendModeClear);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, lastTouch.x, lastTouch.y);
    CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
    CGContextStrokePath(context);
    canvasView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastTouch = [touch locationInView:canvasView];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

}
4

1 回答 1

10

您绝对可以使用UIImageView不需要自定义 Quartz 层来做到这一点。你熟悉 iOS 中的任何绘图形式吗?touchesBegan:基本上,您只需要使用、touchesMoved:和来跟踪当前和之前的触摸位置touchesEnded

然后,您需要使用以下内容在当前触摸位置和先前触摸位置之间绘制一条“线”(在这种情况下会擦除其下方的内容),该线直接取自我开发的实际应用程序,该应用程序做了一些类似的事情:

UIGraphicsBeginImageContext(canvasView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[canvasView.image drawInRect:CGRectMake(0, 0, canvasView.frame.size.width, canvasView.frame.size.height)];
CGContextSetLineCap(context, lineCapType);
CGContextSetLineWidth(context, brushSize);
CGContextSetStrokeColorWithColor(context, strokeColor);
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextBeginPath(context);
CGContextMoveToPoint(context, lastTouch.x, lastTouch.y);
CGContextAddLineToPoint(context, currentTouch.x, currentTouch.y);
CGContextStrokePath(context);
canvasView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

在这段代码canvasView中是一个UIImageView. 这种绘图有很多教程。您想要的重要是将混合模式设置为 kCGBlendModeClear。就是这一行:

CGContextSetBlendMode(context, kCGBlendModeClear);
于 2012-07-14T03:51:50.820 回答