#ios #uiimagepickercontroller
#iOS #uiimagepickercontroller
Вопрос:
В моем приложении, когда я выбираю видео и после его сжатия система создает два файла.Когда я выбираю другой, он снова дублирует его. Это увеличивает объем моей памяти. Теперь я хотел удалить сжатую версию файла из системы. Может кто-нибудь, пожалуйста, помочь мне в этом?
Это мой делегат imagePickerController
#pragma mark - UIImagePicker delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
if (CFStringCompare ((__bridge CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) {
NSURL *videoUrl=(NSURL*)[info objectForKey:UIImagePickerControllerMediaURL];
NSString *moviePath = [videoUrl path];
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath)) {
UISaveVideoAtPathToSavedPhotosAlbum (moviePath, nil, nil, nil);
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
isVideoShooted =NO;
[self navigateToPostAdViewWithURL:videoURL];
}
}
[self dismissViewControllerAnimated:YES completion:^{
}];
}
И видео, которое я получаю,
file:///Users/webwerks/Library/Developer/CoreSimulator/Devices/17B6B1EB-8015-4747-81B0-6FB07F713471/data/Containers/Data/Application/18A3DB9A-78CE-4761-A4EB-B35CBFCEF1C5/tmp/trim.A8DC422C-137F-4FF9-878A-E175CE4DDF8F.MOV
И когда я загружаю сжатое видео, я удаляю файл по этому пути, используя следующий код
(void)clearTmpDirectory
{
NSArray* tmpDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSTemporaryDirectory() error:NULL];
for (NSString *file in tmpDirectory) {
if ([[file pathExtension]isEqualToString:@"MOV"])
[[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), file] error:NULL];
}
}
этот код работает нормально, он удаляет видео из пути, но все же я получаю еще один видеофайл в приложении «Фотографии». Это непрерывно генерирует файл каждый раз, когда я загружаю видео. Теперь я хотел не создавать дубликат файла на фотографиях, иначе он должен быть удален после загрузки.
Комментарии:
1. Можете ли вы добавить сюда свой код для выбора и сжатия видео? Итак, мы можем выяснить, как вам помочь.
2. На самом деле, я реализовал UIImagePickerControllerDelegate, и по умолчанию он сжимает видеофайл и сохраняет его
3. Нет, по умолчанию UIImagePickerController не сжимает видеофайл developer.apple.com/reference/uikit/… . Вам лучше указать свой код в своем вопросе, поэтому я не просто предполагаю. (вы можете нажать редактировать, чтобы добавить свой код в вопрос).
4. Я обновил вопрос с помощью кода
Ответ №1:
Вам не нужно использовать UISaveVideoAtPathToSavedPhotosAlbum
. Это приведет к дублированию видеофайла.
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath)) {
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
isVideoShooted =NO;
[self navigateToPostAdViewWithURL:videoURL];
}