UIImageWriteToSavedPhotosAlbum(UIImage*image,
id completionTarget,
SEL completionSelector,void*contextInfo);
Potrzebujesz tylko uzupełniania Cel , kompletowania i kontekstu, jeśli chcesz być powiadamiany o zakończeniu UIImagezapisywania, w przeciwnym razie możesz przekazaćnil .
Cześć dzięki za świetne rozwiązanie. Tutaj mam jedną wątpliwość, jak uniknąć duplikatów podczas zapisywania obrazu w bibliotece zdjęć. Z góry dziękuję.
Czy istnieje sposób na zapisanie dowolnych metadanych wraz ze zdjęciem?
zakdance
2
Próbowałem oszczędzać za pomocą ALAssetsLibrary, zapisywanie zajmuje tyle samo czasu UIImageWriteToSavedPhotosAlbum.
Hlung
I to zawiesza kamerę :( Chyba nie jest obsługiwane tło?
Hlung
Ten jest o wiele czystszy, ponieważ możesz użyć bloku do obsługi zakończenia.
jpswain
5
Korzystam z tego kodu i dołączam ten framework #import <AssetsLibrary / AssetsLibrary.h>, a nie AVFoundation. Czy nie należy edytować odpowiedzi? @Denis
Po prostu przekaż mu obrazy z tablicy w ten sposób
-(void) saveMePlease {//Loop through the array herefor(int i=0:i<[arrayOfPhotos count]:i++){NSString*file =[arrayOfPhotos objectAtIndex:i];NSString*path =[get the path of the image like you would in DOCS FOLDER or whatever];NSString*imagePath =[path stringByAppendingString:file];UIImage*image =[[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];//Now it will do this for each photo in the arrayUIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);}}
Przepraszam za literówki, po prostu zrobiłem to w locie, ale masz rację
// Save it to the camera roll / saved photo album// UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image,self,"image:didFinishSavingWithError:contextInfo:",nil)
func image(image:UIImage!, didFinishSavingWithError error:NSError!, contextInfo:AnyObject!){if(error !=nil){// Something wrong happened.}else{// Everything is alright.}}
dla każdego obrazu, który chcesz zapisać, dodaj go do NSMutableArray
//in the .h file put:NSMutableArray*myPhotoArray;///then in the .m-(void) viewDidLoad {
myPhotoArray =[[NSMutableArray alloc]init];}//However Your getting images-(void) someOtherMethod {UIImage*someImage =[your prefered method ofusingthis];[myPhotoArray addObject:someImage];}-(void) saveMePlease {//Loop through the array herefor(int i=0:i<[myPhotoArray count]:i++){NSString*file =[myPhotoArray objectAtIndex:i];NSString*path =[get the path of the image like you would in DOCS FOLDER or whatever];NSString*imagePath =[path stringByAppendingString:file];UIImage*image =[[[UIImage alloc] initWithContentsOfFile:imagePath]autorelease];//Now it will do this for each photo in the arrayUIImageWriteToSavedPhotosAlbum(image,nil,nil,nil);}}
Jeśli nie chcesz otrzymywać powiadomień o zakończeniu zapisywania obrazu, możesz przekazać zero w parametrze uzupełniania Cel , uzupełnienie i kontekst Informacje parametrów.
Ważną rzeczą do zapamiętania jest to, że twoja metoda, która obserwuje zapisywanie obrazu, powinna mieć te 3 parametry, w przeciwnym razie wystąpią błędy NSInvocation.
Odpowiedzi:
Możesz użyć tej funkcji:
Potrzebujesz tylko uzupełniania Cel , kompletowania i kontekstu, jeśli chcesz być powiadamiany o zakończeniu
UIImage
zapisywania, w przeciwnym razie możesz przekazaćnil
.Zobacz oficjalną dokumentację dla
UIImageWriteToSavedPhotosAlbum()
.źródło
Przestarzałe w iOS 9.0.
Jest znacznie szybszy niż UIImageWriteToSavedPhotosAlbum sposób na zrobienie tego przy użyciu frameworku AssetsLibrary systemu iOS 4.0+
źródło
ALAssetsLibrary
, zapisywanie zajmuje tyle samo czasuUIImageWriteToSavedPhotosAlbum
.Najprostszym sposobem jest:
Dla
Swift
, można zwrócić się do zapisywania na iOS biblioteki zdjęć przy użyciu szybkichźródło
Pamiętaj o jednej rzeczy: jeśli korzystasz z funkcji oddzwaniania, upewnij się, że selektor jest zgodny z następującą formą:
W przeciwnym razie nastąpi awaria z błędem, takim jak następujący:
[NSInvocation setArgument:atIndex:]: index (2) out of bounds [-1, 1]
źródło
Po prostu przekaż mu obrazy z tablicy w ten sposób
Przepraszam za literówki, po prostu zrobiłem to w locie, ale masz rację
źródło
Podczas zapisywania tablicy zdjęć nie używaj pętli for, wykonaj następujące czynności
źródło
W Swift :
źródło
Poniższa funkcja będzie działać. Możesz skopiować stąd i wkleić tam ...
źródło
Szybki 4
źródło
moja ostatnia odpowiedź to zrobi ..
dla każdego obrazu, który chcesz zapisać, dodaj go do NSMutableArray
źródło
źródło
Utworzyłem w tym celu kategorię UIImageView na podstawie niektórych powyższych odpowiedzi.
Plik nagłówka:
Realizacja
Teraz wystarczy wywołać tę funkcję w widoku obrazu:
Opcjonalnie możesz zmienić parametr minimumPressDuration.
źródło
W Swift 2.2
Jeśli nie chcesz otrzymywać powiadomień o zakończeniu zapisywania obrazu, możesz przekazać zero w parametrze uzupełniania Cel , uzupełnienie i kontekst Informacje parametrów.
Przykład:
Ważną rzeczą do zapamiętania jest to, że twoja metoda, która obserwuje zapisywanie obrazu, powinna mieć te 3 parametry, w przeciwnym razie wystąpią błędy NSInvocation.
Mam nadzieję, że to pomoże.
źródło
Możesz tego użyć
źródło