ios: на скриншоте не отображается маска слоя - PullRequest
1 голос
/ 25 февраля 2012

У меня есть вид с определенным цветом фона. Я маскирую это представление следующим кодом:

UIView *colorableView = [[UIView* alloc] init];
colorableView.backgroundColor = someColor;

CALayer *maskLayer = [CALayer layer];
maskLayer.contents = (id)[UIImage imageNamed:maskImageName].CGImage;

colorableView.layer.mask = maskLayer;

Ок, там все отлично работает. Представление маскируется, поэтому некоторые части являются прозрачными. Сейчас я делаю скриншот этого вида:

CGRect frame = colorableView.frame;

UIGraphicsBeginImageContext(frame.size);

CGContextRef c = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(someUninterestingCodeToGetACorrectPosition);

[self.view.layer renderInContext:c];
UIImage *screenShotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return screenShotImage;

Снимок экрана работает (на самом деле я также отображаю некоторые другие вещи над видом, и это также отображается на скриншоте), но маска почему-то не распознается. То есть, я получаю скриншот полноцветного изображения (прямоугольник) без маски, скрывающей некоторые его части.

Я полагаю, что «UIGraphicsGetImageFromCurrentImageContext ()` не работает со слоями маски, так что я могу с этим поделать? Мне нужно иметь UIImage для отображения скриншота по почте.

Большое спасибо заранее

1 Ответ

1 голос
/ 25 февраля 2012

Одним из способов решения этой проблемы может быть использование функций Quartz для закрепления представления (CGContextClip, я точно не помню, вам придется немного покопаться в документации).Надеюсь, это поможет

...