1

私はカメラアプリを開発しています。アプリを使用して撮影した写真が何であれ、それらの写真はプライベートアプリディレクトリに保存する必要があります。

1番目のビューのボタンをクリックすると、 2番目のビューに移動して、プライベートアプリディレクトリから取得した画像が表示されます。

2番目のビューでそれらの画像のいくつかを選択できるはずです。[次へ]ボタンをクリックすると、選択した画像が3番目のビューに表示されます。

では、まず、プライベートディレクトリを作成する方法と、そのディレクトリから画像を取得する方法を教えてください。

そして、画像を選択して次のビューに送信する方法は?

また、 3番目のビューで選択した画像の順序を変更できるはずです

それらをドラッグするだけです。これを行う方法も?

4

1 に答える 1

1

初めに、

画像を保存するためのアプリを作成し、他のアプリで画像を使用することを考えている場合は、間違った道を選択しています. Apple はあなたにそれを許可しません。

できることは、アプリケーションが提供するディレクトリに画像を保存できることです。

ディレクトリについては、次のディレクトリをたどることができます。


考慮すべき 3 種類の書き込み可能なパスがあります。1 つ目はドキュメントです。保持したいものを保存し、iTunes を通じてユーザーが利用できるようにします (3.2 以降)。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

2 番目に、Documents ディレクトリと非常によく似た Library フォルダがあります。このフォルダには、設定ファイルと書き込み可能なデータベースが保存されます。これらも保存しておく必要がありますが、ユーザーが iTunes を介して操作できないようにする必要があります。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];

ユーザーが 3.2 よりも古いデバイス (iPad) を使用して iTunes でファイルを表示することはできませんが、NSLibraryDirectory 定数は iPhoneOS 2.0 以降で使用できるため、3.0 を対象とするビルドに使用できることに注意してください。それ)。また、ユーザーがドキュメントを変更できるようにアプリにフラグを立てない限り、ユーザーは何も見ることができません。そのため、現在ドキュメントを使用している場合は、ユーザー ドキュメントのサポートのために更新するときに場所を変更する限り問題ありません。

最後にキャッシュ ディレクトリがあります。ここには、長期的に存在するかどうかを気にしない画像を配置できます (電話は、ある時点でそれらを削除する可能性があります)。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir == NO) {
    [[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}

実際にそこに Caches ディレクトリを作成する必要があることに注意してください。そのため、書き込み時には毎回確認して作成する必要があります。ちょっと痛いですが、そういうことです。

次に、書き込み可能なパスがある場合は、次のようにファイル名を追加します。

NSString *filePath =  [documentsDirectory stringByAppendingPathComponent:@"SomeDirectory/SomeFile.txt"];

また

NSString *filePath =  [cachePath stringByAppendingPathComponent:@"SomeTmpFile.png"];

そのパスを読み取りまたは書き込みに使用します。

これらの書き込み可能なパスのいずれかにサブディレクトリを作成できることに注意してください。上記の文字列の例のいずれかが使用されています (作成されていると仮定します)。

画像をフォト ライブラリに書き込もうとしている場合、ファイル システム コールを使用してこれを行うことはできません。代わりに、メモリ内に UIImage を用意し、UIKit によって定義された UIImageWriteToSavedPhotosAlbum() 関数呼び出しを使用する必要があります。宛先の形式や圧縮レベルを制御することはできず、この方法で EXIF を添付することはできません。


あなたのニーズを満たし、ディレクトリについて理解するのに役立つことを願っています.

于 2012-10-25T10:06:56.723 に答える