Используйте CoreGraphic Stroke в качестве альфа-маски в приложении для iPhone - PullRequest
2 голосов
/ 05 февраля 2010

Я в основном стремлюсь создать что-то похожее на очень простую версию iSteam / iFog alebit для другой цели. В действительности будут два изображения, одно из предмета, а другое - изображение сгущения или что-то подобное. Затем пользователь может стереть палец по экрану, и он «отрежет» его от верхнего слоя, чтобы открыть нижний слой. До сих пор мне удавалось рисовать базовую линию на экране с помощью CoreGraphics и штрихов, но я не могу найти способ использовать ее в качестве альфа-маски для слоя с паром.

Если бы кто-нибудь мог дать мне совет о том, что использовать, или даже лучше, какой-нибудь пример кода, я был бы очень признателен, так как сейчас я вырываю свои волосы. Вот то, что я имею до сих пор:


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {</p>

<pre><code>mouseSwiped = YES;
UITouch *touch = [touches anyObject];   
CGPoint currentPoint = [touch locationInView:self.view];
UIGraphicsBeginImageContext(self.view.frame.size);
CGRect rect = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[drawImage.image drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, 36.0);
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextBeginPath(context);

CGContextMoveToPoint(context, lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y);
CGContextStrokePath(context);
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();

}

1 Ответ

3 голосов
/ 06 февраля 2010

Вы хотите вызвать метод CGContextClipToMask. Просто нарисуйте свое «паровое» изображение, а затем штрих на другом CGImage Затем обрежьте пар до удара. Как то так:

- (void)somewhereElse{
    UIImage *steam = [[UIImage imageNamed:@"steamImage.png"] retain];
    steamRef = steam.CGImage;
    //...
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawImage(context, self.bounds, steamRef);         //draw the main image
    CGContextClipToMask(context, self.bounds, maskRef);         //respect alpha mask
    //where maskRef is a GCImage of your stroked path
}
...