Полноэкранный просмотр изображения при касании через UICollectionView

У меня есть раздел JSON UICollectionView моего приложения. Моя первоначальная идея кода изменилась, и теперь я просто хочу, чтобы выбранное изображение отображалось в полноэкранном режиме как эффект в стиле «лайтбокс» с полным управлением жестами масштабирования.

У меня возникли проблемы с тем, чтобы какой-либо код работал с помощью жестов или других методов для моего представления коллекции.

Вот фрагмент генерации представления:

-(NSInteger)collectionView:(UICollectionView *)collectionView       numberOfItemsInSection:(NSInteger)section
{
    return myObject.count;
}

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

    CustomColumnCell *myCell = [collectionView
                                dequeueReusableCellWithReuseIdentifier:@"myCell"
                                forIndexPath:indexPath];

    NSDictionary *tmpDict = [myObject objectAtIndex:indexPath.row];

    NSURL *url = [NSURL URLWithString:[tmpDict objectForKey:path]];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *img = [[UIImage alloc] initWithData:data];

    myCell.displayImage.image = img;
    myCell.displayDetail.text= [tmpDict objectForKey:name];

    return myCell;
}

Как мне просто включить полноэкранный просмотр изображения, на которое нажали? Я могу получить его в новом контроллере представления, но все, что мне просто нужно, это эффект стиля «лайтбокс», когда изображение анимируется по направлению к основному экрану и заполняет его соотношением сторон?

В приведенном ниже коде показана часть того, как я могу нажимать на элементы для создания простого контроллера представления. Но мне нужно на том же экране, просто наложенное на весь экран:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) {

        NSIndexPath *IndexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];
        NSDictionary *tmpDict = [myObject objectAtIndex:IndexPath.row];

        [[segue destinationViewController] setImageItem:[tmpDict objectForKey:path]];
        [[segue destinationViewController] setDetailItem:[tmpDict objectForKey:name]];

    }
}

У кого-нибудь есть идеи?


person user6934446    schedule 03.11.2016    source источник


Ответы (2)


Просто просмотрите эту библиотеку, она очень полезна и проста в реализации https://github.com/jaredsinclair/JTSImageViewController

person Ahmed Sahib    schedule 04.11.2016

Если вы хотите просмотреть выбранное изображение с анимацией, вы можете использовать JTSImageViewController.

Добавьте классы библиотеки и сделайте этот код, вот и все.

    // Create image info
    JTSImageInfo *imageInfo = [[JTSImageInfo alloc] init];
    imageInfo.imageURL = [NSURL URLWithString:[[self.attachments objectAtIndex:indexPath.row] valueForKey:@"attach_file"]];
    imageInfo.referenceRect = self.frame;
    imageInfo.referenceView = self.superview;

    // Setup view controller
    JTSImageViewController *imageViewer = [[JTSImageViewController alloc]
                                           initWithImageInfo:imageInfo
                                           mode:JTSImageViewControllerMode_Image
                                           backgroundStyle:JTSImageViewControllerBackgroundOption_Blurred];

    // Present the view controller.
    [imageViewer showFromViewController:self transition:JTSImageViewControllerTransition_FromOriginalPosition];

Я надеюсь, что это поможет вам.

person Samkit Shah    schedule 04.11.2016
comment
Спасибо, а как их соединить? - person user6934446; 04.11.2016
comment
Вы можете добавить жест в UIImageView и, щелкнув это изображение, вы можете написать этот код. но этот код должен вызываться из контроллера представления, поэтому я предлагаю вам создать один метод делегата и вызвать его с помощью этого кода. - person Samkit Shah; 07.11.2016