Полноэкранный режим просмотра коллекции - PullRequest
0 голосов
/ 07 февраля 2019

Это скорее вопрос подхода.Предположим, у меня есть представление коллекции, где каждая ячейка занимает весь экран, на котором есть изображения и некоторые другие данные (например, заголовок, информация и т. Д.).Я хочу, чтобы пользователь нажимал на ячейку и изображение, чтобы перейти в полноэкранный режим.Я могу добиться этого, инициализируя отдельный вид и масштабируя изображение, чтобы оно соответствовало экрану с этим кодом.

            let newImageView = UIImageView(image: imageView.image)
            newImageView.frame = UIScreen.main.bounds
            newImageView.backgroundColor = .black
            newImageView.contentMode = .scaleAspectFit 

, а затем отклоняю его, удаляя вид следующим образом:

        self.navigationController?.isNavigationBarHidden = false
        navigationController?.isToolbarHidden = false
        sender.view?.removeFromSuperview()
    }

Q1.Есть ли способ, которым я могу манипулировать всеми ячейками коллекционного вида, чтобы трансформироваться в полноэкранный режим при нажатии, чтобы я мог использовать действие смахивания по умолчанию для коллекционного вида для прокрутки изображений по горизонтали?

Q2.Если нет, я использую эту библиотеку INSPhotoGallery !чтобы добавить эффект при нажатии, который дает мне желаемый эффект, но из-за большой загрузки изображений из библиотеки PHAsset мое приложение вылетает.

Вот как я инициализировал свои phassets для передачи в эту библиотеку:

lazy var photos: [INSPhotoViewable] = {
        var allPhotos: [INSPhoto] = Array()
        fetchResult.enumerateObjects({ (asset, index, stop) in
            let image = self.requestImageForPHAsset(asset: asset)
            allPhotos.append(INSPhoto(image: image, thumbnailImage: nil))
        })

        return allPhotos
    }()

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        // handle tap events
        print("You selected cell #\(indexPath.item)!")
        let cell = collectionView.cellForItem(at: indexPath) as! DetailedCollectionViewCell
        let currentPhoto = photos[indexPath.row]
        let galleryPreview = INSPhotosViewController(photos: photos, initialPhoto: currentPhoto, referenceView: cell)

        galleryPreview.overlayView.photosViewController?.singleTapGestureRecognizer.isEnabled = false

        galleryPreview.referenceViewForPhotoWhenDismissingHandler = { [weak self] photo in
            if let index = self?.photos.index(where: {$0 === photo}) {
                let indexPath = IndexPath(item: index, section: 0)
                return collectionView.cellForItem(at: indexPath) as? DetailedCollectionViewCell
            }
            return nil
        }
        present(galleryPreview, animated: true, completion: nil)
    }

Вопрос в том, как предотвратить сбой приложения.Я знаю, что это связано с кэшированием изображений и асинхронной загрузкой.Знаете ли вы о библиотеке, которая хорошо интегрируется с PHAssets, если ничего больше?Спасибо!

1 Ответ

0 голосов
/ 08 февраля 2019
  1. Вы также можете использовать контроллер просмотра страниц для достижения той же функциональности.Это полезно, если у вас менее 5 ячеек.
  2. Вы можете вывести изображение в полноэкранный режим модально.Просто создайте отдельный контроллер представления и реализуйте аниматоры (делегаты перехода) для этого модального экрана.Это будет более сложным, но и более правильным способом.AppStore работает так же
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...