간단한 작업을 수행하려고합니다. 있는 UIImage에있는 UIWebView의 내용을 변환 그러나 나는 유사한 오류가의 무리에게 다음과 같은 코드가 실행될 때마다 점점 계속, 휴대 전화의 문서 디렉토리에 저장 :UIWebView UIImage 잘못된 컨텍스트 0x0
:UIGraphicsBeginImageContext(rect.size);
[self.webView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
는 다음과 같은 오류를 생성을
Jun 10 20:06:18 <Error>: CGContextSaveGState: invalid context 0x0
Jun 10 20:06:18 <Error>: CGContextSetAlpha: invalid context 0x0
Jun 10 20:06:18 <Error>: CGContextSaveGState: invalid context 0x0
Jun 10 20:06:18 <Error>: CGContextSetFillColorWithColor: invalid context 0x0
Jun 10 20:06:18 <Error>: CGContextAddRect: invalid context 0x0
Jun 10 20:06:18 <Error>: CGContextDrawPath: invalid context 0x0
나는 약간의 연구를했는데 이것이 위의 코드가 drawRect :(CGRect) rect 메서드에 없기 때문에 발견되었다. 그러나 UIWebView가 초기화 된 후 어떻게 호출해야합니까? 나는 그것을 수동으로 부르지 않습니까?
이
내가 HTML을 생성하고 웹보기에로드하기 위해 사용하고 코드입니다 :이 functon에게 사용의 drawRect에있을 필요가 없습니다 그것은 아니-(void)saveHTMLDocument {
NSMutableString *htmlDocumentToSave = [[NSMutableString alloc] initWithString:@"<html><body>"];
[htmlDocumentToSave appendString:@"<table border=""1""><tr><th>Snag Number</th><th>Snag Photo</th><th>Snag Description</th><th>Date Taken</th>"];
for (int i = 0; i < self.fetchedResultsController.fetchedObjects.count; i++) {
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation([self.photoArray objectAtIndex:i])];
NSString *base64String = [imageData base64EncodedString];
Snag *snag = [self.fetchedResultsController.fetchedObjects objectAtIndex:i];
NSString *tableString = [NSString stringWithFormat:@"<tr><td>%i</td><td><p><b><img src='data:image/png;base64,%@'></b></p></td><td>%@</td><td>%@</td></tr>", i+1, base64String, snag.snagDescription, snag.dateTaken];
[htmlDocumentToSave appendString:tableString];
}
[htmlDocumentToSave appendString:@"</table></body></html>"];
//Save the HTMl document that will be attached.
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *htmlPath = [documentsPath stringByAppendingPathComponent:@"test"];
[htmlDocumentToSave writeToFile:htmlPath atomically:NO encoding:NSUTF8StringEncoding error:nil];
self.htmlData = [NSData dataWithContentsOfFile:htmlPath];
//Generate the UIWebView and load the HTML into it
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"];
NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
self.webView = [[UIWebView alloc] init];
[self.webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
NSString *string = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML"];
NSLog(@"Check if WebView has loaded %@", string);
}
-(void)drawRect:(CGRect)rect {
UIGraphicsBeginImageContext(rect.size);
[self.webView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
최근에 시도하지는 않았지만이 기술은 UIWebViews와 함께 사용하는 경우 이전 버전의 iOS에서는 비정상이었습니다. 또 다른 잠재적 인 문제는 UIWebView가 콘텐츠 표시를 완료했을 때를 파악하는 것입니다. – EricS
예, 실제로 Webview로드가 완료된 후 300 - 500 밀리 초가 걸리는 경향이 있습니다. iOS 4.3 및 5.1에서이 기능을 사용하고 있으며, 현재 잘 작동합니다. ePub 뷰어에서 페이지 전환 애니메이션을 적용하는 데 매우 효과적입니다. good –
감사합니다. Omar, 빠른 질문 하나, 어떻게 그 방법을 호출 할 수 있습니까? – jcrowson