#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. это не совсем так. Потому что у меня уже есть код для отправки и прикрепления, но, как я объяснил, проблема в том, что я нахожусь в одном представлении «Основной вид», и мне нужно сделать «скриншоты» из этого «Основного вида» и «Второго вида», но кнопка «отправить почту» находится на «Основном виде».