Swift: PhotoLibrary удаляет активы и получает прогресс

Мне нужно показать ход удаления фото и видео из фототеки. В случае нескольких фотографий - удаление может занять несколько секунд, а в случае 1000 фотографий - несколько минут. Итак, мне нужно как-то показать прогресс. Как я могу это сделать?

Мой код

    PHPhotoLibrary.shared().performChanges({
        PHAssetChangeRequest.deleteAssets(assets as NSFastEnumeration)
    }, completionHandler: { success, error in
        DispatchQueue.main.async {
        if let error = error {
            print(error.localizedDescription)
        }
        }
    })

person Haloo    schedule 30.07.2019    source источник


Ответы (1)


Вы можете зарегистрировать PHPhotoLibraryChangeObserver, чтобы, как следует из названия, наблюдать за изменениями в библиотеке фотографий. Подробнее об этом можно прочитать здесь.

Когда PHPhotoLibraryChangeObserver заметит изменение, вы можете запросить подробности этого изменения, чтобы узнать, что делать, в этом случае вы загрузите свой пользовательский интерфейс.

Вы можете прочитать больше о PHPhotoLibraryChangeObserver здесь.

РЕДАКТИРОВАТЬ: В ответ на комментарий о том, что этот наблюдатель не срабатывает достаточно часто для обновления состояния пользовательского интерфейса, вы можете попробовать другой подход, например периодически запрашивать все фотографии (возможно, каждые несколько секунд по повторяющемуся таймеру), а затем получать количество результата. Затем, когда операция (в данном случае удаление элементов) завершена, вы можете сделать таймер недействительным.

person JillevdW    schedule 30.07.2019
comment
пробовал, за 100 фото удалить, вызывалось 3 раза - person Haloo; 30.07.2019
comment
@Haloo, посмотри мой отредактированный ответ, возможно, на это стоит обратить внимание. - person JillevdW; 30.07.2019