IPhone SDK стереть UIImageView с экрана с помощью прикосновений?

Я ищу способ стереть 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 {

}

Ответ 1

Вы можете определенно сделать это с помощью 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);