Перехватить UIImageView из другого .XIB

#iphone #objective-c #xcode #xcode4

#iPhone #objective-c #xcode #xcode4

Вопрос:

Парни из этого святого святилища,

Новая проблема! Мне нужно получить UIImageView из другого .XIB. Позвольте мне поместить это в код, чтобы упростить:

1)

 -(UIImage *)grabScreenImage{

    //screen = IBOutlet for the UIImageView

    UIGraphicsBeginImageContext(self.screen.frame.size);
    [(CALayer *)self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    NSLog(@"PASSED BY THE PHOTO DUDES");
    return image;

}
  

2)

 -(UIImage *)takeGraphScreenImage{

//shouldBeGraphViewController = IBOutlet for the other UIViewController
//shouldBeGraph = IBOutLet for the UIImageView in the ShouldBeGraphViewController

        UIGraphicsBeginImageContext(shouldBeGraphViewController.shouldBeTheGraph.frame.size);
        [(CALayer *)shouldBeGraphViewController.shouldBeTheGraph.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsGetCurrentContext();
        return image;
    }
  

(1) работает просто отлично, я снимаю изображение и отправляю его по электронной почте, но (2) этого не делает.

я просто скопировал и вставил и изменил некоторые параметры, чтобы их мог использовать другой, но это дает мне множество ошибок.

3) -(IBAction)Отправка электронной почты{

 MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc]init];

UIImage *curretScreen = [[self takeGrabScreenImage]retain];
UIImage *graphScreen = [[self takeGraphScreenImage]retain];

if ([MFMailComposeViewController canSendMail]){
    NSLog(@"ENTERED THE GOOD PART OF THE IF");
    mailComposer.mailComposeDelegate = self;
    [mailComposer setSubject:@"MY SCREENSHOT TEST"];
    [mailComposer addAttachmentData:UIImagePNGRepresentation(curretScreen) mimeType:@"image/png" fileName:@"SCREENSHOT"];
    [mailComposer addAttachmentData:UIImagePNGRepresentation(graphScreen) mimeType:@"image/png" fileName:@"SCREENSHOT-02"];

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

    /*for (NSString *x in [self.photoLocations allKeys]){
        NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:x];
        UIImage *item = [UIImage imageWithContentsOfFile:fullPath];
        [mailComposer addAttachmentData:UIImagePNGRepresentation(item, 0.5) mimeType:@"image/jpeg" fileName:
    }*/

} else { ... }

[mailComposer setMessageBody:@"PUT YOUR MESSAGE HERE" isHTML:NO];
[self presentModalViewController:mailComposer animated:YES];
[mailComposer release];
[curretScreen release];
  

}

Мне просто нужно сделать скриншоты из обоих UIImageViews (из двух UIViewControllers) и отправить их по электронной почте, часть электронной почты выполнена, и первый снимок экрана тоже, но второй снимок экрана не делается. Выдает мне ошибки, подобные этим:

 Mon May 16 21:02:46 FGringo EmailSending[1036] <Error>: CGContextSaveGState: invalid context 0x0
Mon May 16 21:02:46 FGringo EmailSending[1036] <Error>: CGContextSetAlpha: invalid context 0x0
  

Помогите мне, пожалуйста! (:

Ответ №1:

 - (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // Dismiss image picker modal.
    [picker dismissModalViewControllerAnimated:YES];

    if ([MFMailComposeViewController canSendMail]) {
        // Create a string with HTML formatting for the email body.
        NSMutableString *emailBody = [[NSMutableString alloc] initWithString:@"<html><body>"];

        // Add some text to it.
        [emailBody appendString:@"<p>Body text goes here.</p>"];

        // You could repeat here with more text or images, otherwise
        // close the HTML formatting.
        [emailBody appendString:@"</body></html>"];
        NSLog(@"%@", emailBody);

        // Create the mail composer window.
        MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init];
        emailDialog.mailComposeDelegate = self;

        // Image to insert.
        UIImage *emailImage = [info objectForKey:UIImagePickerControllerOriginalImage];

        if (emailImage != nil) {
            NSData *data = UIImagePNGRepresentation(emailImage);
            [emailDialog addAttachmentData:data mimeType:@"image/png" fileName:@"filename_goes_here.png"];
        }

        [emailDialog setSubject:@"Subject goes here."];
        [emailDialog setMessageBody:emailBody isHTML:YES];

        [self presentModalViewController:emailDialog animated:YES];
        [emailDialog release];
        [emailBody release];
    }
}
  

Комментарии:

1. это не совсем так. Потому что у меня уже есть код для отправки и прикрепления, но, как я объяснил, проблема в том, что я нахожусь в одном представлении «Основной вид», и мне нужно сделать «скриншоты» из этого «Основного вида» и «Второго вида», но кнопка «отправить почту» находится на «Основном виде».