2009-03-28 6 views
2

내장 그래픽 및 사용자 정의 텍스트를 사용하여 이미지를 만드는 iPhone 앱을 개발 중입니다.iPhone 앱 전체 화면으로 이메일 보내기

그래픽과 사용자 정의 텍스트가 내장되어있어 내 앱을 가질 수 있기를 원하며 이메일을 보낼 이메일 앱으로 단일 이미지 (스크린 샷과 유사)로 보낼 수 있습니다.

앱을 종료하고 사진 앱으로 이동 한 다음 스크린 샷을 선택하고 이메일을 보내지 않고도 스크린 샷을 찍지 않고도이 작업을 수행 할 수 있습니까?

궁극적으로 나는 사용자가 탭할 수있는 버튼을 앱에서 가질 수 있기를 원하며, 전체 화면이 캡쳐되어 메일 앱에 직접 전송됩니다.

감사하게 생각하는 모든 포인터!

답변

0

이 방법이 효과가 있는지는 잘 모르겠지만 비트 맵을 지원하는 그래픽 컨텍스트를 만든 다음 루트보기의 Core Animation 레이어를 가져 와서 -renderInContext : 메서드를 호출 해보십시오. 그 수도 할 수 있지만 그것을 시도 적이 없어.

아마도 다른 접근 방법을 고려해야합니다. 화면에 표시되는 커스텀 드로잉 코드를 작성했고 파일이나 메모리 버퍼로도 그릴 수 있기를 원합니까? 그렇다면, 아마도 당신은 그 그림 코드를 당신의 시각에서 그리고 당신의 시각이 단순히 사용하는 개별적인 대상으로 분해해야합니다. 그렇게하면 두 가지 방법 모두를 매우 쉽게 그릴 수 있습니다.

5

브렌트의 대답에 확장하려면, 스크린 샷을 잡아와 PNG로 문서 디렉토리라는 screenshot.png 그것을 저장합니다 다음 코드를

UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow]; 

UIGraphicsBeginImageContext(screenWindow.frame.size); 
[screenWindow.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

NSData *screenshotPNG = UIImagePNGRepresentation(screenshot); 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSError *error = nil; 
[screenshotPNG writeToFile:[documentsDirectory stringByAppendingPathComponent:@"screenshot.png"] options:NSAtomicWrite error:&error]; 

가 떠날 것 같은이 조금 원유입니다 제목 표시 줄의 화면 위쪽에 빈 자리가 있으며 CAEAGLLayers의 콘텐츠를 가져 오는 것으로 나타나지 않습니다.

또한 표준 mailto : // URL 구성과 그 뒤에 openURL을 사용하여 MIME 인코딩 첨부 파일을 보낼 수 있다고 생각하지 않습니다. 어쩌면 3.0 SDK가이 문제를 해결할 수 있을지 모르겠지만 아직 해결하지 못했습니다. 응용 프로그램 내에서 직접 메시지를 보내려면 sksmtpmessage과 같은 것을 사용해야 할 수도 있습니다.

+0

당신이 UIApplication의 윈도우 배열을 반복하여 (keyWindow만이 아닌) 모두 렌더링하면 상태 표시 줄이 그려집니다. – benzado

4

개인 API UIGetScreenImage도 있습니다. 그것과 같이 사용된다 :

CGImageRef UIGetScreenImage(); 
@interface UIImage (ScreenImage) 
+ (UIImage *)imageWithScreenContents; 
@end 

@implementation UIImage (ScreenImage) 
+ (UIImage *)imageWithScreenContents 
{ 
    CGImageRef cgScreen = UIGetScreenImage(); 
    if (cgScreen) { 
     UIImage *result = [UIImage imageWithCGImage:cgScreen]; 
     CGImageRelease(cgScreen); 
     return result; 
    } 
    return nil; 
} 
@end 

이 함수는 PNG 생산 UIImagePNGRepresentation와 결합 될 수있다.

+0

이 방법이 잘 작동하는지 모르겠지만 지금은 작동하지 않습니다. – Dimitris

+0

여전히 작동하지만 시뮬레이터가 아닌 장치에서만 가능하므로 Apple은이를 확실히 거부합니다. – rpetrich

1

skpsmtpmessage 위대한입니다. 사실, 너무 좋았다면, 나는 가서 그것을 복제하고 github에 샘플 프로젝트를 추가했습니다. 아래의 샘플 GUI는 진행률 표시 줄 및 기타 기능과 같은 몇 가지 종소리와 휘파람을 추가하지만 기본적으로 핵심 skpsmtpmessage 코드를 유지합니다.

http://github.com/kailoa/iphone-smtp/tree/master

0

OS 3.0에서는 MFMailComposeViewController를 사용할 수 있습니다

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 
picker.mailComposeDelegate = self; 
[picker addAttachmentData:screenshotPNG mimeType:@"image/png" fileName:@"PNGfromMyApp"]; 
3

애플이를 사용하는 now allowing 응용 프로그램입니다;

CGImageRef UIGetScreenImage(void); 

기능.유지 된 CGImageRef를 반환한다는 것을 기억해야하지만 그에 따라 메모리를 관리해야합니다.

는 또한 가 ... 아이폰 OS의 릴리스는이 기능의 공개 API에 상응를 제공 할 수있다 "고 말한다. 같은 시간에, UIGetScreenImage을 (사용하는 모든 응용 프로그램) 공개 API를 채택해야합니다. "