У меня есть вид с определенным цветом фона. Я маскирую этот вид следующим кодом:ios: Снимок экрана не отображается Маска Layer
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 отображал скриншот в почте.
спасибо заранее
Хорошо, я использую'CGContextClipToMask (контекст, rect, maskImage) 'внутри метода drawRect, теперь и он работает для скриншота. Я делаю это только для скриншота, потому что вы не можете анимировать цвета (которые я иногда делаю) при переопределении drawRect. Одна вещь, вы знаете, как получить маску с более высоким разрешением, потому что я думаю, что размер прямоугольника ограничивает разрешение маски. Поскольку исходный прямоугольник довольно мал, но значок чаще масштабируется, и когда я снимаю снимок экрана, разрешение маски намного ниже разрешения маски моего исходного метода маскировки. – JayAr
Возможно, потому что вы находитесь на экране сетчатки? Если это так, вы получаете свойство масштаба [[UIScreen mainScreen]] (не совсем уверенно в синтаксисе), а затем вы умножаете свой размер прямоугольника на это значение. – Ganzolo
Я работаю над Ipad2, поэтому нет изображения сетчатки и свойства шкалы. 1. Если я сделаю оригинальное представление очень большим в Interface Builder, то разрешение маски будет хорошим. Но первоначальный вид такой же большой, как иконка, и масштабы становятся более крупными в какое-то время. Затем я делаю скриншот и потому, что исходный прямоугольник был маленьким, разрешение низкое. Думаю, я открываю для этого еще один вопрос. – JayAr