diff --git a/src/ios/DMCMediaPicker/.DS_Store b/src/ios/DMCMediaPicker/.DS_Store index 3bf546f..573bd77 100644 Binary files a/src/ios/DMCMediaPicker/.DS_Store and b/src/ios/DMCMediaPicker/.DS_Store differ diff --git a/src/ios/DMCMediaPicker/DmcPickerViewController.h b/src/ios/DMCMediaPicker/DmcPickerViewController.h index dca9200..aa91a1b 100644 --- a/src/ios/DMCMediaPicker/DmcPickerViewController.h +++ b/src/ios/DMCMediaPicker/DmcPickerViewController.h @@ -17,4 +17,5 @@ @property (nonatomic, assign) NSInteger maxSelectCount; //'selectMode':101,//101=PICKER_IMAGE_VIDEO , 100=PICKER_IMAGE , 102=PICKER_VIDEO @property (nonatomic, assign) NSInteger selectMode; +@property (nonatomic, assign) NSInteger maxSelectSize; @end diff --git a/src/ios/DMCMediaPicker/DmcPickerViewController.m b/src/ios/DMCMediaPicker/DmcPickerViewController.m index 91ee2cd..d55eadc 100644 --- a/src/ios/DMCMediaPicker/DmcPickerViewController.m +++ b/src/ios/DMCMediaPicker/DmcPickerViewController.m @@ -29,6 +29,7 @@ - (void)viewDidLoad { //init config self.maxSelectCount=self.maxSelectCount>0?self.maxSelectCount:15; + self.maxSelectSize=self.maxSelectSize>0?self.maxSelectSize:1048576; self.selectMode=self.selectMode>0?self.selectMode:101; //config end @@ -379,12 +380,14 @@ NSInteger i=[self isSelect:asset]; CollectionViewCell *cell = (CollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath]; - if([selectArray count]>=self.maxSelectCount&&i<0){ + if([selectArray count] >= self.maxSelectCount && i < 0){ [self alertMax]; }else{ - if([selectArray count]>self.maxSelectCount){ + if([selectArray count] > self.maxSelectCount){ [self alertMax]; - }else{ + }else if([self assetFileSize:asset] > self.maxSelectSize) { + [self alertSize]; + } else { i<0?[selectArray addObject:asset]:[selectArray removeObject:asset]; i<0?[self showSelectView:cell]:[self hidenSelectView:cell]; } @@ -429,7 +432,40 @@ [self._delegate resultPicker:srray]; [self dismissViewControllerAnimated:YES completion:nil]; } - + +-(long) assetFileSize:(PHAsset *)asset +{ + __block long imageSize = 0; + + if(asset.mediaType == PHAssetMediaTypeVideo) { + PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init]; + options.version = PHVideoRequestOptionsVersionOriginal; + + [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { + if([asset isKindOfClass:[AVURLAsset class]]) { + AVURLAsset* urlAsset = (AVURLAsset*)asset; + NSNumber *size; + + [urlAsset.URL getResourceValue:&size forKey:NSURLFileSizeKey error:nil]; + NSLog(@"%lu", (unsigned long)size); + imageSize = (unsigned long)size; + } + }]; + } else { + // Fetch image data to retrieve file size and path + PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init]; + options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; + options.resizeMode = PHImageRequestOptionsResizeModeExact; + options.synchronous = YES; //Set this to NO if is needed + + [[PHImageManager defaultManager] requestImageDataForAsset:asset options:options resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { + NSLog(@"%lu", (unsigned long)imageData.length); + imageSize = (unsigned long)imageData.length; + }]; + } + return imageSize; +} + -(NSInteger)isSelect:(PHAsset *)asset { int is=-1; @@ -450,15 +486,23 @@ } -(void)alertMax{ - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" - message:NSLocalizedString(@"maxSelectAlert",nil) - preferredStyle:UIAlertControllerStyleAlert]; + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"maxSelectAlert", nil), self.maxSelectCount]; + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"ok",nil) style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:nil]; } + +-(void)alertSize{ + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"maxSizeAlert", nil), (float)self.maxSelectSize/1048576]; + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"ok",nil) style:UIAlertActionStyleDefault handler:nil]; + [alertController addAction:okAction]; + [self presentViewController:alertController animated:YES completion:nil]; +} + - (NSString *)getNewTimeFromDurationSecond:(NSInteger)duration { NSString *newTime; if (duration < 10) { diff --git a/src/ios/DMCMediaPicker/de.lproj/Localizable.strings b/src/ios/DMCMediaPicker/de.lproj/Localizable.strings index 91088ad..49bde23 100644 --- a/src/ios/DMCMediaPicker/de.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/de.lproj/Localizable.strings @@ -3,9 +3,10 @@ "Back"="Zurück"; "All"="Alle Fotos"; "Video"="Video"; -"maxSelectAlert"="Maximale Anzahl erreicht"; +"maxSelectAlert"="Sie können nur %d Bilder auswählen"; +"maxSizeAlert"="Sie können nur Bilder mit einer Größe von bis zu %.02f MB auswählen"; "ok"="OK"; "Unable to access album" = "Auf Album kann nicht zugegriffen werden"; "Please allow to access your album" = "Bitte erlaube den Zugriff auf Dein Album in \"Einstellungen -> Datenschutz -> Fotos\""; "Setting" = "Einstellungen"; -"Preview" = "Vorschau"; \ No newline at end of file +"Preview" = "Vorschau"; diff --git a/src/ios/DMCMediaPicker/en.lproj/Localizable.strings b/src/ios/DMCMediaPicker/en.lproj/Localizable.strings index 501660a..d7a9e22 100644 --- a/src/ios/DMCMediaPicker/en.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/en.lproj/Localizable.strings @@ -2,8 +2,9 @@ "Done"="Done"; "All"="All photos"; "Video"="Video"; -"maxSelectAlert"="Has reached the maximum number of choices"; "ok"="OK"; +"maxSelectAlert"="You can only select %d images"; +"maxSizeAlert"="You can only select images up to %.02f mb in size"; "Unable to access album" = "Unable to access album"; "Please allow to access your album" = "Please allow to access your album in \"Settings -> Privacy -> Album\""; "Setting" = "Setting"; diff --git a/src/ios/DMCMediaPicker/es.lproj/Localizable.strings b/src/ios/DMCMediaPicker/es.lproj/Localizable.strings index ccdba9c..e50b1f6 100644 --- a/src/ios/DMCMediaPicker/es.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/es.lproj/Localizable.strings @@ -2,7 +2,8 @@ "Done"="hecho"; "All"="Todas las fotos"; "Video"="Video"; -"maxSelectAlert"="Has alcanzado el número maximo de selecciones"; +"maxSelectAlert"="Solo puedes seleccionar %d imágenes"; +"maxSizeAlert"="Solo puede seleccionar imágenes de hasta %.02f mb de tamaño"; "ok"="OK"; "Unable to access album" = "Denegado el acceso al album"; "Please allow to access your album" = "Por favor permita el acceso a sus albums en \"Configuraciones -> Privacidad -> Album\""; diff --git a/src/ios/DMCMediaPicker/pt-BR.lproj/Localizable.strings b/src/ios/DMCMediaPicker/pt-BR.lproj/Localizable.strings index 9451ca5..e4e2793 100644 --- a/src/ios/DMCMediaPicker/pt-BR.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/pt-BR.lproj/Localizable.strings @@ -2,7 +2,8 @@ "Done"="Pronto"; "All"="Todas as fotos"; "Video"="Vídeo"; -"maxSelectAlert"="Atingiu o limite máximo de escolhas"; +"maxSelectAlert"="Você só pode selecionar %d imagens"; +"maxSizeAlert"="Você só pode selecionar imagens com tamanho de até %.02f mb"; "ok"="OK"; "Unable to access album" = "Impossibilitado de acessar o álbum"; "Please allow to access your album" = "Por favor permita acessar o seu álbum em \“Configurações -> Privacidade -> Álbum\""; diff --git a/src/ios/DMCMediaPicker/pt-PT.lproj/Localizable.strings b/src/ios/DMCMediaPicker/pt-PT.lproj/Localizable.strings index 9451ca5..e4e2793 100644 --- a/src/ios/DMCMediaPicker/pt-PT.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/pt-PT.lproj/Localizable.strings @@ -2,7 +2,8 @@ "Done"="Pronto"; "All"="Todas as fotos"; "Video"="Vídeo"; -"maxSelectAlert"="Atingiu o limite máximo de escolhas"; +"maxSelectAlert"="Você só pode selecionar %d imagens"; +"maxSizeAlert"="Você só pode selecionar imagens com tamanho de até %.02f mb"; "ok"="OK"; "Unable to access album" = "Impossibilitado de acessar o álbum"; "Please allow to access your album" = "Por favor permita acessar o seu álbum em \“Configurações -> Privacidade -> Álbum\""; diff --git a/src/ios/DMCMediaPicker/tr.lproj/Localizable.strings b/src/ios/DMCMediaPicker/tr.lproj/Localizable.strings index 3ec3750..46fa53e 100644 --- a/src/ios/DMCMediaPicker/tr.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/tr.lproj/Localizable.strings @@ -2,7 +2,8 @@ "Done"="Bitti"; "All"="Tümü"; "Video"="Video"; -"maxSelectAlert"="Maksimum seçime ulaşıldı!"; +"maxSelectAlert"="Sadece %d görüntü seçebilirsiniz"; +"maxSizeAlert"="Yalnızca %.02f mb boyutunda olan resimleri seçebilirsiniz"; "ok"="Tamam"; "Unable to access album" = "Galerinize erişilemiyor"; "Please allow to access your album" = "Lütfen \"Ayarlar -> Gizlilik -> Fotoğraflar\" menüsünden uygulamaya erişim izni verin."; diff --git a/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings b/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings index 7023dc1..2883c1b 100644 --- a/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings +++ b/src/ios/DMCMediaPicker/zh-Hans.lproj/Localizable.strings @@ -2,7 +2,8 @@ "Done"="完成"; "All"="所有照片"; "Video"="视频"; -"maxSelectAlert"="已达到选择数量上限"; +"maxSelectAlert"="您只能选择%d张图片"; +"maxSizeAlert"="您只能选择最大%.02f mb的图像"; "ok"="好"; "Unable to access album" = "无法访问相册"; "Please allow to access your album" = "请在设置-隐私-相册中允许访问相册"; diff --git a/src/ios/MediaPicker.m b/src/ios/MediaPicker.m index f71938e..6372f1a 100644 --- a/src/ios/MediaPicker.m +++ b/src/ios/MediaPicker.m @@ -30,6 +30,11 @@ }@catch (NSException *exception) { NSLog(@"Exception: %@", exception); } + @try{ + dmc.maxSelectSize=[[options objectForKey:@"maxSelectSize"]integerValue]; + }@catch (NSException *exception) { + NSLog(@"Exception: %@", exception); + } dmc._delegate=self; [self.viewController presentViewController:[[UINavigationController alloc]initWithRootViewController:dmc] animated:YES completion:nil]; }