2014-03-12 20 views
0

나는 웹에서 텍스트와 이미지를 보여주는 UIWebView가 있습니다.UIWebView에서 이미지를 전체 화면으로 표시하는 방법은 무엇입니까?

UIWebView에서 이미지를 탭할 때와 같이 오리레 젼을 포함한 전체 화면으로 표시하고 싶습니다.

그래서 다음 코드로 테스트했습니다.

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
     NSURL *URL = [request URL]; 

     NSData *data = [[NSData alloc] initWithContentsOfURL:URL]; 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]]; 

     GGFullscreenImageViewController *vc = [[GGFullscreenImageViewController alloc] init]; 
     vc.liftedImageView = imageView; 

     [self presentViewController:vc animated:YES completion:nil]; 

     return NO; 
    } 

    else 
    { 
     return YES; 
    } 
} 

UIWebView에서 이미지를 탭하면 작동하지 않고 오류가 표시됩니다.

2014-03-12 13:59:40.397 MMSP[1368:a0b] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer bounds contains NaN: [0 0; nan nan]' 
*** First throw call stack: 

어쨌든 나는 위에서 말한 것처럼해야합니까? ;

+0

imageView 프레임을 설정하지 않았습니다. becz GGFullScreenImageViewController가 자동으로 수행 할 수 있습니다. –

+0

URL에 이미지 데이터가 포함되어 있는지 확인 하시겠습니까? – sage444

답변

1

A) 나는 당신이() 귀하의 충돌로 할 필요가없는 일반적 GGFullscreenImageViewController

B)의 프레임을 설정해야한다고 생각, 난 당신이해야 하지 사용 [URL [을 NSData의 ALLOC] initWithContentsOfURL] 생각 이 시점에서 이미지를로드합니다. 링크를 클릭하면 이미지가 다운로드 될 때까지 기다린 다음 표시하여 사용자에게 '지연'을 초래할 수 있습니다.

대신 GGFullscreenImageViewController의보기 컨트롤러에 URL을 넘겨주고 이미지를 다운로드 할 때까지 활동 표시기를 표시하면됩니다.

+0

GGFullScreenImageViewController에 URL을 직접 표시하는 방법은 무엇입니까? –

+0

제 사과, 나는 GGFullScreenImageViewController가 자신이 작성한 클래스라고 생각했습니다. 그것이 아니기 때문에, 당신은 언급 된 방법을 깨닫는 것처럼 보일 수 없습니다. 이것을 허용하도록 GitHub에서 코드를 수정하거나 shouldStartLoadWithRequest 메소드에 활동 표시기를 표시 할 수 있습니다 (즉, 새로운 반투명보기를 작성하여 표시). 완료되면 GGFullScreenImageViewController를로드 할 수 있습니다. – cania

1

GGFullscreenImageViewController에 이미 UIImageView 설정이있는 경우 UIImage을 새로 만들고 UIImageView을 생성하는 대신 왜 할당 하시겠습니까? 새로 생성 된 인스턴스를 지정하면 liftedImageView의 이미지보기 인스턴스가 손실됩니다.

그냥 이렇게

NSData *data = [[NSData alloc] initWithContentsOfURL:URL]; 
GGFullscreenImageViewController *vc = [[GGFullscreenImageViewController alloc] init]; 
vc.liftedImageView.image = [UIImage imageWithData:data]; 

이상적으로, 당신은 initWithUrl: 방법을 제공하여 GGFullscreenImageViewController에 이미지 URL을 통과해야한다. 이미지 비동기식으로을 다운로드하거나이 작업을 수행하는 오픈 소스 코드 (예 : SDWebImage)를 사용할 수 있습니다.

희망이 도움이됩니다.

관련 문제