1

我想在每次用户按住屏幕一秒钟时截屏,然后打开一个电子邮件窗口让用户发送图像。但我有一个奇怪的问题;如果存在渐变图像(UIImage其中加载了 PNG 渐变 - 将解释),图像会变得混乱。

所以我创建了一个UILongPressGestureRecgnizer,将其设置minimumPressDuration1.0f并将其添加到主视图中作为手势识别器:[self.view addGestureRecognizer:myRecognizer]。识别器调用一个方法,比如说shareClicked. 我想在其中捕获当前屏幕并弹出带有该图像的电子邮件编辑器。这是我的做法:

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
    else
        UIGraphicsBeginImageContext(self.view.bounds.size);

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

    MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;
    [mailComposer setSubject:@"Share feature"];
    [mailComposer setMessageBody:[NSString stringWithFormat:@"Im sharing this with you cause its cool."] isHTML:NO];
    [mailComposer addAttachmentData:UIImagePNGRepresentation(image) mimeType:@"image/png" fileName:@"image"];

    [self presentViewController:mailComposer animated:YES completion:NULL];

但有个问题。主视图上有一个表格视图,在第三个单元格中有一个我之前提到的渐变。我不知道如何解释它,但它是这样的:

在此处输入图像描述

如图所示,顶部有一个渐变,还有一个稍低一些。第一个会正常渲染,而第二个会导致一个奇怪的问题。渐变实际上不是蓝色,而是白色并变为透明。这是黑色表面上的渐变图像: 在此处输入图像描述

以下是模拟器的屏幕截图:

在此处输入图像描述

最后是它如何在邮件编辑器中呈现和显示:

在此处输入图像描述

我究竟做错了什么?问题是什么?它不是模拟器的错,因为它在移动设备上也是一样的。如果这有什么不同的话,它的iOS7。

为了清楚起见,顶部渐变是相同的,但是是径向的,并且渲染得非常完美。两种渐变都是 tableview 单元格的子视图。如何解决?希望我们能找到解决方案,因为我确实花了一些时间来“制作”这个问题 :)

4

1 回答 1

1

看看推荐的解决方案https://developer.apple.com/library/ios/qa/qa1703/_index.html#//apple_ref/doc/uid/DTS40010193因为 UIGetScreenImage 不再被允许

于 2013-09-07T15:01:20.497 回答