Fire Fist
Fire Fist

Reputation: 7060

How to show Image in full screen from UIWebView?

I have a UIWebView that showing text and images from web.

I want to do it like when i tap on Image in UIWebView , i want to show it in Full Screen including Orientations.

so i tested with following codes.

- (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;
    }
}

It doesn't work and showing error when i tap image in 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:

Is there anyway to do like i said above?

Upvotes: 0

Views: 1568

Answers (2)

Amar
Amar

Reputation: 13222

If you already have a UIImageView setup on your GGFullscreenImageViewController then why not just create the UIImage and assign, instead of creating a new UIImageView. The image view instance in liftedImageView is lost when you assign newly created instance.

Just do this,

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

Ideally, you should pass the image url to the GGFullscreenImageViewController by providing initWithUrl: method. Do the downloading of image asynchronously or you could use open source code which does this, ex: SDWebImage.

Hope this helps!

Upvotes: 1

cania
cania

Reputation: 858

a) I think you should set the frame for GGFullscreenImageViewController

b) Generally (not having to do with your crash), i think you should not use [[NSData alloc] initWithContentsOfURL:URL]; to load the image at this point. On clicking a link, it will wait until the image has downloaded, and then show it, resulting in a 'lag' for your user.

Instead, just hand over the URL to your GGFullscreenImageViewController, the view controller and have it display an activity indicator until it has downloaded the image.

Upvotes: 1

Related Questions