Objective c ios:屏幕截图没有';t显示掩模层

Objective c ios:屏幕截图没有';t显示掩模层,objective-c,ios,screenshot,layer,mask,Objective C,Ios,Screenshot,Layer,Mask,我有一个特定背景颜色的视图。我使用以下代码屏蔽此视图: UIView *colorableView = [[UIView* alloc] init]; colorableView.backgroundColor = someColor; CALayer *maskLayer = [CALayer layer]; maskLayer.contents = (id)[UIImage imageNamed:maskImageName].CGImage; colorableView.layer.ma

我有一个特定背景颜色的视图。我使用以下代码屏蔽此视图:

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来在邮件中显示屏幕截图


提前感谢大家

解决此问题的一种方法是使用Quartz函数剪裁视图(CGContextClip,我记不太清楚了,您需要深入了解一下文档)。
希望这会有所帮助

解决此问题的一种方法是使用Quartz函数来剪裁视图(CGContextClip,我记不太清楚了,您需要深入了解一下文档)。
希望这将有助于

好的,我正在使用“CGContextClipToMask(context,rect,maskImage)`内部drawRect方法,现在它可以用于屏幕截图了。我只在截图中这样做,因为在覆盖drawRect时,您无法设置颜色的动画(我有时会这样做)。有一件事,你知道如何获得更高分辨率的掩模吗,因为我认为矩形的大小限制了掩模的分辨率。因为原始的rect非常小,但图标有时会放大,当我拍摄屏幕截图时,遮罩的分辨率远低于我原始遮罩方法中遮罩的分辨率。可能是因为你在视网膜显示器上?如果是这种情况,您将获得scale属性[[UIScreen mainScreen]scale](不完全确定语法),然后将rect size乘以该值。我正在处理Ipad2,因此没有视网膜显示,scale属性返回1。如果我在Interface Builder中使原始视图非常大,则遮罩的分辨率很好。但原始视图与图标一样大,有时会更大。然后我做了一个屏幕截图,因为原来的rect很小,所以分辨率很低。我想我还需要回答另一个问题。是的,使用新代码可能会更好。因此,这可以帮助我们完全理解您所解释的:)好的,我正在使用“CGContextClipToMask(context,rect,maskImage)`内部drawRect方法,现在它适用于屏幕截图。我只在截图中这样做,因为在覆盖drawRect时,您无法设置颜色的动画(我有时会这样做)。有一件事,你知道如何获得更高分辨率的掩模吗,因为我认为矩形的大小限制了掩模的分辨率。因为原始的rect非常小,但图标有时会放大,当我拍摄屏幕截图时,遮罩的分辨率远低于我原始遮罩方法中遮罩的分辨率。可能是因为你在视网膜显示器上?如果是这种情况,您将获得scale属性[[UIScreen mainScreen]scale](不完全确定语法),然后将rect size乘以该值。我正在处理Ipad2,因此没有视网膜显示,scale属性返回1。如果我在Interface Builder中使原始视图非常大,则遮罩的分辨率很好。但原始视图与图标一样大,有时会更大。然后我做了一个屏幕截图,因为原来的rect很小,所以分辨率很低。我想我还需要回答另一个问题。是的,使用新代码可能会更好。因此,这有助于我们完全理解您的解释:)