Xcode 4.3如何保存应用程序屏幕的区域?

时间:2012-11-20 17:36:58

标签: iphone ios iphone-5

我正在Xcode 4.3上创建一个本机应用程序并部署到目标iOS 5.该应用程序基本上是一个贺卡创建者。我无法弄清楚如何从应用程序中保存部分屏幕。

我想做的是:

我向用户提供了一个“电子邮件”按钮。当他们点击按钮时,应用应该将他们的卡“保存”为图像,然后将其“粘贴”到电子邮件正文中。

这与本网站上的其他答案不同的原因是我要保存的区域由4个“元素”组成。有一个背景图形是倾斜的卡背景,然后有一个文本字段,用户可以在其中键入消息,然后旁边是一个图片区域,他们可以选择自己的图片放在卡上。

这是我正在谈论的照片: http://marklopezdesigns.com/mydownloadz!/screenshotCard3.png

如何保存这些“复合”高分辨率?

然后我如何将其转换为电子邮件正文消息?

我问如何“保存”它的原因是因为我希望能够为用户提供另一个按钮,其中显示“保存到相机胶卷”和“作为信息发送”。我想如果我能理解如何将这个高分辨率保存到一个变量,那么我应该关闭并运行。

提前感谢您的帮助。

======

以下是

的解决方案

======           ......经过一番摆弄之后呢。终于得到了我想要的东西。这是我的方法中的代码库,在触摸“保存到相册”按钮时触发:

- (IBAction)savePhoto{  

CGRect rect;  
rect = CGRectMake(11,50 ,305, 262);  
UIView *cardViewer = [[UIView alloc] initWithFrame:rect];  
UIGraphicsBeginImageContext(cardViewer.bounds.size);   
//make view background transparent  
cardViewer.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];  
cardViewer.opaque = NO;  

//stuff items into a subview for capturing  
[self.view addSubview:cardViewer];  
[cardViewer addSubview:self.tiltedCard];  
[cardViewer addSubview:self.bigCardView];  
[cardViewer addSubview:self.cardWords];  
[cardViewer addSubview:self.photoView];  

[cardViewer.layer renderInContext:UIGraphicsGetCurrentContext()];  
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext();  
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);  
UIImage *img = [UIImage imageWithCGImage:imageRef];  
CGImageRelease(imageRef);  
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);  

//put everything back where it belongs  
[self.view addSubview:self.tiltedCard];  
[self.view addSubview:self.bigCardView];  
[self.view addSubview:self.cardWords];  
[self.view addSubview:self.photoView];  

[cardViewer removeFromSuperview];  

}

3 个答案:

答案 0 :(得分:1)

要仅捕获屏幕的某个区域,请使用CGRectMake指定边界。

CGRect rect = CGRectMake(50, 50, 100, 100);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

在上面的示例中,我们捕获从x:50px和y:50px开始的100px乘100px区域。

答案 1 :(得分:0)

可能通过渲染图层上下文并抓取图像来获取图层,我用它来显示奇特的动画

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

答案 2 :(得分:0)

要捕获屏幕的某个区域,请使用 UIView或SubView ,然后使用CGRectMake指定边界。

CGRect rect = CGRectMake(10, 10, 200, 200);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.YourView.layer renderInContext:context]; // Make sure here you are using the  greetingcardView rather than self.view
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

注意: self.view将捕获整个屏幕,因此只需在任何地方渲染视图。