2012-06-21 11 views
111

Jestem nowy w Xcode (używając 4.3) i nie jestem pewien, jak zapisać obraz do rolki aparatu urządzenia. Wszystko, co zrobiłem do tej pory, to ustawienie IBAction dla przycisku, aby zapisać obraz. Jaką metodę lub funkcję biblioteki można użyć do zapisania obrazu w rolce aparatu użytkownika?Jak zapisać obraz na rolce z aparatu?

Odpowiedz

212

Używa się funkcji UIImageWriteToSavedPhotosAlbum().

//Let's say the image you want to save is in a UIImage called "imageToBeSaved" 
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil); 

Edit:

//ViewController.m 
- (IBAction)onClickSavePhoto:(id)sender{ 

    UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil); 
} 
+0

Załóżmy, że mam "- (IBAction) onClickSavePhoto: (id) sender;" w moim pliku ViewController.h, używając tego, co masz powyżej, co dokładnie powinienem umieścić w pliku ViewController.m? Jeszcze raz dziękuję! – user1470914

+1

@ user1470914 Zobacz moją zmianę. Ponadto, skąd otrzymujesz obraz do zapisania w rolce z aparatu? Czy jest już w pakiecie aplikacji, czy użytkownik robi zdjęcie, a następnie zapisuje je w rolce z aparatu? – pasawaya

+0

Dziękuję za cierpliwość qegal. Nie miałem okazji ponownie powrócić do tego problemu do tej pory. EDIT nas super pomocny. Obraz znajduje się w pakiecie aplikacji. W aplikacji dostępnych jest kilka zdjęć, które można wyświetlić jako małe miniatury. Po wybraniu małej miniatury następuje przejście do nowego widoku i wyświetlenie wersji pełnoekranowej. Mam przycisk w prawym rogu górnego panelu nawigacyjnego, który mówi "zapisz" i jest to przycisk, który chcę zapisać obraz na rolce urządzenia, aby mógł zostać zastosowany jako tapeta. Jeszcze raz dziękuję za pomoc i cierpliwość (nie wiesz, dlaczego casperOne to zamknął). – user1470914

6

Dla porównania można zapisywać filmy w podobny sposób:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil); 

może chcesz zapisać plik do przesłania na Instagram, na przykład:

// Save video to camera roll; we can share to Instagram from there. 
-(void)didTapShareToInstagram:(id)sender { 
    UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), (void*)CFBridgingRetain(@{@"caption" : caption})); 
} 

- (void)    video: (NSString *) videoPath 
    didFinishSavingWithError: (NSError *) error 
       contextInfo: (void *) contextInfoPtr { 

    NSDictionary *contextInfo = CFBridgingRelease(contextInfoPtr); 
    NSString *caption   = contextInfo[@"caption"]; 

    NSString *escapedString = [videoPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString 
    NSString *escapedCaption = [caption stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString 

    NSURL *instagramURL  = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@", escapedString, escapedCaption]]; 

    [[UIApplication sharedApplication] openURL:instagramURL]; 
} 
29

Oto odpowiedź f lub iOS8 przy użyciu frameworku Zdjęcia.

Objective-C:

#import <Photos/Photos.h> 

UIImage *snapshot = self.myImageView.image; 

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:snapshot]; 
    changeRequest.creationDate   = [NSDate date]; 
} completionHandler:^(BOOL success, NSError *error) { 
    if (success) { 
     NSLog(@"successfully saved"); 
    } 
    else { 
     NSLog(@"error saving to photos: %@", error); 
    } 
}]; 

Swift:

// Swift 3.0 
import Photos 

PHPhotoLibrary.shared().performChanges({ 
    PHAssetChangeRequest.creationRequestForAsset(from: snapshot) 
}, completionHandler: { success, error in 
    if success { 
     // Saved successfully! 
    } 
    else if let error = error { 
     // Save photo failed with error 
    } 
    else { 
     // Save photo failed with no error 
    } 
}) 

Oto link do dokumentacji Apple.

+0

Jak uzyskać adres URL obrazu @ricardopereira –

+0

@Mansuu Proszę spojrzeć na https://stackoverflow.com/a/37248867/3641812 – ricardopereira

Powiązane problemy