我正在开发相机应用程序,无论我使用我的应用拍摄的照片,这些照片都应存储在私人应用程序目录中。
如果我点击第一视图中的按钮,则应转到第二视图,其中显示从我的私人应用目录中检索到的图片 。
我应该能够在第二个视图中选择一些图像,如果我点击下一个按钮,所选图像应该显示在第三个视图中
首先,如何创建私人目录以及如何从该目录中检索图像?
如何选择图片并将其发送到下一个视图?
此外,我应该能够在第3个视图中更改所选图片的顺序
只需拖动即可。怎么做呢?
答案 0 :(得分:1)
首先,
如果您正在考虑创建一个用于存储图像的应用程序。使用其他应用程序中的图像,然后您选择了错误的路径。 Apple不会允许你这样做。
您可以执行的操作是将图像存储在应用程序提供的目录中。
对于目录,您可以按照以下目录进行操作:
有三种可写路径需要考虑 - 第一种是文档,您可以存储要保留的内容并通过iTunes提供给用户(截至3.2):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
其次,与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。
我希望它可以帮助您满足您的需求&也了解目录。