Это скорее вопрос подхода.Предположим, у меня есть представление коллекции, где каждая ячейка занимает весь экран, на котором есть изображения и некоторые другие данные (например, заголовок, информация и т. Д.).Я хочу, чтобы пользователь нажимал на ячейку и изображение, чтобы перейти в полноэкранный режим.Я могу добиться этого, инициализируя отдельный вид и масштабируя изображение, чтобы оно соответствовало экрану с этим кодом.
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, если ничего больше?Спасибо!