2012-06-21 4 views
111

Xcode (4.3 사용)를 처음 사용하고 이미지를 장치의 카메라 롤에 저장하는 방법을 잘 모르겠습니다. 지금까지 내가 해왔 던 모든 작업은 이미지를 저장하는 버튼에 대한 IBAction을 설정합니다. 이미지를 사용자의 카메라 롤에 저장하는 데 사용할 수있는 라이브러리 메서드 또는 함수는 무엇입니까?이미지를 카메라 롤에 저장할 수 있습니까?

답변

212

UIImageWriteToSavedPhotosAlbum() 기능을 사용합니다.

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

편집 :

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil); 

당신은 예를 들어, 인스 타 그램에 업로드 할 비디오를 저장할 수 있습니다

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

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

'- (IBAction) onClickSavePhoto : (id) sender;'라고 말한 경우, 내 ViewController.h 파일에서 위의 내용을 사용하여 정확히 ViewController.m 파일에 배치해야 할 내용은 무엇입니까? 다시 한번 감사드립니다! – user1470914

+1

@ user1470914 내 편집을 참조하십시오. 또한 이미지를 카메라 롤에 저장할 위치는 어디입니까? 앱의 번들에 이미 있습니까? 아니면 사용자가 사진을 찍은 다음 카메라 롤에 저장합니까? – pasawaya

+0

양해 해 주셔서 감사합니다. 지금까지이 문제를 다시 검토 할 기회가 없었습니다. 귀하의 EDIT가 도움이됩니다. 이미지가 앱의 번들에 있습니다. 앱에 여러 이미지가 있으며 작은 미리보기 이미지로 볼 수 있습니다. 작은 미리보기 이미지가 선택되면 새로운보기로 이동하고 전체 화면 버전을 볼 수 있습니다. 상단 네비게이션의 오른쪽 구석에 '저장'이라고 표시된 버튼이 있습니다.이 버튼은 이미지를 기기의 카메라 롤에 저장하여 배경 화면으로 적용 할 수 있습니다. 귀하의 도움과 인내심에 다시 한번 감사드립니다 (casperOne가 왜 이것을 닫았는지 확실하지 않음). – user1470914

6

이 참고로, 당신은 유사한 방식으로 비디오를 저장할 수 있습니다 :

// 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

다음은 답변입니다. 또는 iOS8에서 사진 프레임 워크를 사용합니다.

목표 - 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 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 
    } 
}) 

여기에 애플 문서에 link을합니다.

+0

이미지 URL을 얻을 수있는 방법 @ricardopereira –

+0

@ 만수 https://stackoverflow.com/a/37248867/3641812에서보십시오. – ricardopereira

관련 문제