Я создаю приложение (быстро). Один из вариантов должен состоять в том, чтобы позволить пользователю либо выбрать несколько фотографий и загрузить их, либо сделать фотографию и создать с ней публикацию. Моя идея основана на следующей иерархии:
Нажата кнопка «Новая фотография» -> Пользователю предоставляется контроллер представления UICollection со всеми фотографиями из его библиотеки и возможностью выбора нескольких фотографий (я повторно использую ячейку для заполнения этого представления коллекции изображениями из библиотеки фотографий) и над этим должна быть ячейка Камера (пользователю нужно нажать на кнопку, чтобы разрешить доступ к камере, чтобы сделать снимок). Вот представление из Симулятора.
Я написал код, который получает фотографии из библиотеки и добавляет их в массив здесь (ниже я покажу код для них). Проблема в том, что когда вы впервые загружаете приложение и пытаетесь опубликовать, вас просят предоставить доступ к фотографиям. Несмотря на выбор пользователя (согласен он или нет), представление коллекции не обновляется.
Что для этого нужно сделать. Когда пользователю предлагается предоставить доступ к фотографиям и он нажимает "ОК", он должен перезагрузить данные в представлении коллекции, но этого не происходит. И когда они нажимают «Не разрешать», он должен закрыть весь контроллер представления. Вот мой код
class CVController: UICollectionViewController, UINavigationControllerDelegate, UICollectionViewDelegateFlowLayout {
var photosLibraryArray = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
grabAllPhotosFromPhoneLibrary()
}
// Grab All Photos from Library
func grabAllPhotosFromPhoneLibrary () {
let imageManager = PHImageManager.default()
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = true // synchronous works better when grabbing all images
requestOptions.deliveryMode = .opportunistic
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] // if false = last image we took would show first
let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
// 1. Are there photos in the library
if fetchResult.count > 0 {
// 2. if fetch.count > 0 it means there's at least 1 photo in the library
for i in 0..<fetchResult.count {
// 3. Cycling through the photos
imageManager.requestImage(for: fetchResult.object(at: i), targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler:
{ image, error in
// 4. Append each image in the array
self.photosLibraryArray.append(image!)
})
}
} else {
print("You've got no photos")
self.collectionView?.reloadData()
}
Пробовал звонить collectionView.reloadData()
в viewWillApear()
, viewDidApear()
, ничего не получилось.
self.collectionView?.reloadData()
, где вы получаете событие для OK. - person Prateekro   schedule 11.05.2017