Iphone Как сделать фон контекста прозрачным? - PullRequest
21 голосов
/ 14 декабря 2011
CALayer *sublayer = [CALayer layer];
/*sublayer.backgroundColor = [UIColor blueColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;*/
sublayer.frame = CGRectMake(30, 100, 256, 256);
sublayer.contents = (id)[[UIImage imageNamed:@"moon.png"] CGImage];
[self.view.layer addSublayer:sublayer];
//self.view.backgroundColor = [UIColor blackColor];

//add moon mask
UIGraphicsBeginImageContextWithOptions(CGSizeMake(400, 400), YES, 1);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextClearRect(contextRef, CGRectMake(0, 0, 400, 400));
CGContextSetRGBFillColor(contextRef, 1, 1, 1, 0.8);
CGContextSetRGBStrokeColor(contextRef, 0, 0, 0, 0.5);
CGRect ellipse = CGRectMake(50, 50, 128, 128);
CGContextAddEllipseInRect(contextRef, ellipse);
CGContextFillEllipseInRect(contextRef, ellipse);

CALayer* sublayer2 = [CALayer layer];
sublayer2.frame = CGRectMake(30, 100, 256, 256);
sublayer2.backgroundColor = [UIColor clearColor].CGColor;
sublayer2.contents = (id)[UIGraphicsGetImageFromCurrentImageContext() CGImage];
[self.view.layer addSublayer:sublayer2];

Это код, который я написал до сих пор.Сначала я делаю слой с изображением луны.Затем я добавляю второй слой с пользовательским рисунком, который должен покрывать часть луны.Однако contextRef отдает свой черный фон, поэтому, когда я помещаю второй слой, первый становится невидимым.Есть ли способ, которым я могу решить это?А еще лучше, есть ли лучший способ сделать собственный рисунок программно и добавить его в слой?

1 Ответ

56 голосов
/ 16 декабря 2011
UIGraphicsBeginImageContextWithOptions(CGSizeMake(400, 400), NO, 1);

Установка этого аргумента в NO решает мою проблему.

...