autresphere / ASMediaFocusManager

iOS library to animate your image and video thumbnails to fullscreen.
MIT License
899 stars 158 forks source link

Better support for remote images #44

Open nnhubbard opened 9 years ago

nnhubbard commented 9 years ago

I am using a UICollectionView to show some thumbnail image from an API endpoint. When tapping on one, I use ASMediaFocusManager to show the full size image. However, it doesn't seem like there is very good remove image loading support, as it kind of loads, but it is blurry.

It seems like a much better solution would be to show a progress indicator on top of the tapped view. Then when the remove media is loaded, THEN show it in the focus manager.

autresphere commented 9 years ago

It should not be blurry as ASMediaFocusManager loads the image in the background form the URL you gave, and then shows it as soon as it is available. Can you check [ASMediaFocusManager loadImageFromURL:onImageView:] to see if the decoded image is the right one and has the right size? I suspect your URL to be wrong or to link to a small image instead of the full size image.

nnhubbard commented 9 years ago

I suspect that you are correct. However, for some reason when I use installOnView for my collectionViewCell imageView I never get any tap detection on the cell. But, if I call installOnView for the actual cell, it DOES work, but I have to also call mediaFocusManager:imageViewForView:, which is where I am going wrong and passing in the thumbnail rather than the full size URL. Here is what I have:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    ZSSPhoto *item = [self.items objectAtIndex:indexPath.row];
    ZSSPhotoCell *cell = (ZSSPhotoCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionCell" forIndexPath:indexPath];
    __weak UIImageView *imageView = cell.imageView;
    imageView.contentMode = UIViewContentModeScaleAspectFill;

    if (item.image) {

        cell.imageView.image = item.image;

    } else {

        [imageView setImageWithURLRequest:[NSURLRequest requestWithURL:item.thumbURL] placeholderImage:[UIImage imageNamed:@"ZSSProfileImageViewDefault"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

            [UIView transitionWithView:imageView
                              duration:0.23f
                               options:UIViewAnimationOptionTransitionCrossDissolve
                            animations:^{
                                imageView.image = image;
                            } completion:nil];
            item.isLoaded = YES;

        } failure:nil];

    }

    [self.mediaFocusManager installOnView:cell];

    return cell;

}//end

- (UIImageView *)mediaFocusManager:(ASMediaFocusManager *)mediaFocusManager imageViewForView:(UIView *)view {

    ZSSPhotoCell *cell = (ZSSPhotoCell *)view;
    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
    return cell.imageView;

}

- (NSURL *)mediaFocusManager:(ASMediaFocusManager *)mediaFocusManager mediaURLForView:(UIView *)view
{

    NSIndexPath *indexPath = [self.collectionView indexPathForCell:(ZSSPhotoCell *)view];

    // Here, medias are accessed through their name stored in self.mediaNames
    ZSSPhoto *item = [self.items objectAtIndex:indexPath.row];

    return item.mobileURL;
}
dttson commented 9 years ago

First at all, thank you for awesome work that I can use this 3rd party libs for my application. I also have problem with loading image with URL, seems the self.focusViewController.mainImageView does not update even loadImageFromURL:onImageView: called. I also checked the method [ASMediaFocusManager decodedImageWithImage:] and it return the right size (in my case is 640 x 640) so I think there would be some problems about update the image after loading data from URL. Please fix it, I'm very appreciate.

dogo commented 8 years ago

@dttson @nnhubbard @autresphere

PR #69 fixes the issue.