[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
質問
UIImageViewを持っていて、ユーザーが画像を保存できるまで、画像を配置し、保持することができます。問題は、私がビューに配置した画像を実際に保存して取得する方法を見つけ出すことができないことです。
私はこのようにUIImageViewに画像を取得し、配置しました。
//Get Image
- (void) getPicture:(id)sender {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo {
myPic.image = image;
[picker dismissModalViewControllerAnimated:YES];
}
UIImageViewに選択した画像がうまく表示されるのですが、それを保存する方法がわかりません。ビューの他のすべての部分(主にUITextfield)をCore Dataに保存しています。検索して、検索して、人々が提案するコードの多くの部分を試しましたが、私がコードを正しく入力していないか、それらの提案が私のコードのセットアップ方法で動作しないかのどちらかです。おそらく前者だと思います。UITextFieldsのテキストを保存するときに使っているのと同じアクション(保存ボタン)を使って、UIImageViewに画像を保存したいと思っています。以下は、UITextFieldの情報を保存する方法です。
// Handle Save Button
- (void)save {
// Get Info From UI
[self.referringObject setValue:self.myInfo.text forKey:@"myInfo"];
先ほども言ったように、いくつかの方法を試してみたのですが、なかなかうまくいきません。生まれて初めて無生物に物理的な危害を加えたいと思いましたが、なんとか自制しています。
ユーザーが配置した画像をアプリケーションのドキュメント フォルダ内の UIImageView に保存し、ユーザーがそのビューをスタックにプッシュしたときに、それを取得して別の UIImageView に配置して表示できるようにしたいのですが、どうすればよいでしょうか。どんな助けでも大いに感謝します。
どのように解決するのですか?
大丈夫だよ。自分も他人も傷つけないように。
データセットが大きくなりすぎるとパフォーマンスに影響が出るので、おそらくこれらの画像をCore Dataに保存することはしないでしょう。画像をファイルに書き出す方が良いでしょう。
NSData *pngData = UIImagePNGRepresentation(image);
これは、取り込んだ画像のPNGデータを取り出します。ここから、ファイルに書き出すことができます。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[pngData writeToFile:filePath atomically:YES]; //Write the file
後で読む場合も同じように動作します。上でやったようにパスを構築して、それから
NSData *pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:pngData];
おそらくやりたいことは、パス文字列を作成するメソッドを作ることでしょう。なぜなら、そのコードがあちこちに散らばっていると困るからです。それは次のようなものです。
- (NSString *)documentsPathForFileName:(NSString *)name
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
return [documentsPath stringByAppendingPathComponent:name];
}
参考になれば幸いです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SwiftでNSDocumentDirectoryを見つけるには?
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] メソッドが存在するかどうかをチェックする
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する