Поймать UIImageView из другой .XIB - PullRequest
1 голос
/ 17 мая 2011

Чуваки из этого святого святилища,

Новая проблема! Мне нужно получить 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) sendMail {

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 Ответ

0 голосов
/ 17 мая 2011
- (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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...