2014-04-29 5 views
0

스크린 샷을 찍고 버튼을 사용하여 이메일로 보내는 방법은 무엇입니까? 나는 스크린 샷을 찍기위한 코드를 만들었지 만 사진 앨범에 저장됩니다.xamarin ios 스크린 샷 및 이메일

partial void btnScreenshot (NSObject sender) 
    { 
     UIImage image; 
     UIGraphics.BeginImageContext (View.Frame.Size); 
     //new iOS 7 method to snapshot 
     View.DrawViewHierarchy (View.Frame, true); 
     image = UIGraphics.GetImageFromCurrentImageContext(); 
     UIGraphics.EndImageContext(); 
     //...code to save to photo album omitted for brevity 
     image.SaveToPhotosAlbum((img, err) => { 
      if(err != null) 
       Console.WriteLine("error saving image: {0}", err); 
      else 
       Console.WriteLine ("image saved to photo album"); 
      UIAlertView alert = new UIAlertView("Screenshot", "Image saved successfully", alertDelegate, "OK", null); 
      alert.Show(); 
       alert.Show(); 
     }); 
    } 
+0

그리고 전자 메일로 보내려고 시도한 것은 무엇입니까? –

+0

내 대답에 대한 의견을 보내 주시면 감사하겠습니다. 감사합니다 – Scott

+0

안녕하세요 스콧, 아래 조언을 주셔서 감사합니다. 최근 다른 기능을 사용하여 죄송합니다. 나는 당신의 코드를 시험해 보았습니다. 그렇습니다. 고마워! 하지만 실제로 에뮬레이터에서 메일을 보냅니 까? 어떻게 받아 들일 수 있습니까? @Scott – zhihao

답변

4

이메일을 작성하는 방법은 Xamarin tutorial을 사용할 수 있습니다.

그런 다음 스크린 샷을 추가하려면 AddAttachmentData 메서드를 사용해야합니다.

// Take the screenshot 
UIGraphics.BeginImageContext(View.Frame.Size); 
View.DrawViewHierarchy(View.Frame, true); 
UIImage image = UIGraphics.GetImageFromCurrentImageContext(); 
UIGraphics.EndImageContext(); 

// Don't save it to the album (unless you need to) 

// Create an email 
var _mailController = new MFMailComposeViewController(); 
_mailController.SetToRecipients(new []{"[email protected]"}); 
_mailController.SetSubject("Send Screenshot"); 
_mailController.SetMessageBody("This is a screenshot of the app!", false); 

// Add the screenshot as an attachment 
_mailController.AddAttachmentData(image.AsPNG(),"image/png","Screenshot.png"); 

// Handle the action to take when the user completes sending the email 
_mailController.Finished += (object s, MFComposeResultEventArgs args) => { 
    System.Console.WriteLine (args.Result.ToString()); 
    args.Controller.DismissViewController (true, null); 
}; 

// Show the email view 
PresentViewController (_mailController, true, null); 
+0

안녕하세요 @ 스캇, 당신이 나와 짝을 도울 수 있기를 바랐습니다. 위와 같은 코드를 사용하고 있습니다.보기의 프레임보다 넓은 차트의 스냅 샷을 찍으려고하는 것을 제외하면 모든 것이 괜찮습니다. 사용자가 스크롤 할 수 있습니다.) 내 스냅 샷을 잘 렸습니다 및 스냅 샷 차트의 전체 부분을 포함하는 방법을 알아낼 수 없습니다. 어떤 생각? – dmc

+0

@DuncanMcIntyre 귀하의 차트를 UIScrollView 가정 할 경우 컨텍스트 크기를 'ContentSize'즉 UIGraphics.BeginImageContext (YourChartScrollView.ContentSize);로 설정하면 – Scott

+0

이 차트 구성 요소를 실제로 사용하고 있습니다. https://components.xamarin.com/view/barchart ucedrollview를 사용하고 있는지를 파악하지 못하는 것 같습니다. 차트의 프레임 크기를 사용했지만 여전히 동일한 잘린 결과를 얻으려고했습니다. UIGraphics.BeginImageContext (new SizeF (8 00f, 800f)); 그러나 아직도 운이 없다. – dmc