我想在每次用户按住屏幕一秒钟时截屏,然后打开一个电子邮件窗口让用户发送图像。但我有一个奇怪的问题;如果存在渐变图像(UIImage
其中加载了 PNG 渐变 - 将解释),图像会变得混乱。
所以我创建了一个UILongPressGestureRecgnizer
,将其设置minimumPressDuration
为1.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 单元格的子视图。如何解决?希望我们能找到解决方案,因为我确实花了一些时间来“制作”这个问题 :)