0

我想保存显示在UIImage. 但是我想将其分类为类型,例如蔬菜、肉类、生菜等。

我找不到办法做到这一点。
最好和最简单的方法是什么?

此外,我想让用户使用选择器控制器选择他想要保存的类别来保存。谢谢!我真的需要帮助!!

更新 2
为了检查它是否已保存,我进一步构建了一个集合视图控制器,但在[arrayCollectionImages addObject:image];你能解释一下最后一段代码的图像部分出现错误。我在 arrayCollectionImages 也有一个警告,说 arrayCollectionImages 的本地声明隐藏实例变量。——</p>

@interface CollectionViewController (){
    NSArray *arrayCollectionImages;
}


@end

@implementation CollectionViewController

- (void)viewDidLoad {
        dispatch_queue_t searchQ = dispatch_queue_create("com.awesome", 0);
        dispatch_async(searchQ, ^{
            NSArray *arrayCollectionImages = [[NSArray alloc ]init];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *location=@"Hats";
            NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location];
            NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath];
            for(NSString *str in directoryContent){
                NSString *finalFilePath = [fPath stringByAppendingPathComponent:str];
                NSData *data = [NSData dataWithContentsOfFile:finalFilePath];
                if(data)
                {   dispatch_async(dispatch_get_main_queue(),^{
                    UIImage *image = [UIImage imageWithData:data];
                });
                    [arrayCollectionImages addObject:images];
                }
            }
        });

    [super viewDidLoad];
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ReuseID" forIndexPath:indexPath];
    [[cell collectionImageView]setImage:[UIImage imageNamed:[arrayCollectionImages objectAtindex:indexPath.item]]];
    return cell;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return [arrayCollectionImages count];
}
@end
4

1 回答 1

0

第 1 步:
设置 Picker 控制器。
这里是官方参考。
这是一个教程。

尝试使用您想要的所有类型值设置它。您将了解它的委托方法:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

这将返回选择的流派。

第 2 步:
在每个图像上提供一个保存图标或一个保存按钮。单击该图标/按钮时,您应该显示您的选择器视图并让用户选择任何行,并且应该将图像复制到此处的私有变量或属性中,以便稍后在委托方法中引用它。

第 3 步: 当用户选择一行时,调用此委托方法。在这里,我们将根据在 UIPickerView 中选择的类型创建一个新目录,如果不存在的话。然后你应该将你的图像写入路径。

   - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
            NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            //fetch Category Name from the array used to fill the Picker View 
            NSString *categoryName= [array objectAtIndex:row];
            NSString *fPath = [documentsDirectory stringByAppendingPathComponent:categoryName];
            NSFileManager *fileManager=[[NSFileManager alloc]init];
            [fileManager createDirectoryAtPath:fPath withIntermediateDirectories:YES attributes:NO error:NO];

            UIImage *image= captureImage;
            NSData *data= UIImagePNGRepresentation(image);
            [data writeToFile:fPath atomically:NO];
}

要从文档目录中的特定文件夹中检索图像:
首先创建该文件夹的路径。这将取决于特定的流派。假设类型 1。

 // An array to save all images. You have to do this in some other way if selected images are big in size.
 // For that case I suggest retrieving of images only when you are showing them on screen. 
  NSArray *allImagesArray = [[NSArray alloc ]init];
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *location=@"Genre1";
  NSString *fPath = [documentsDirectory stringByAppendingPathComponent:location]; 
  NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: fPath];
  for(NSString *str in directoryContent){
   NSString *finalFilePath = [fPath stringByAppendingPathComponent:str]; 
    NSData *data = [NSData dataWithContentsOfFile:finalFilePath];
      if(data)
      {
        UIImage *image = [UIImage imageWithData:data];
        [allImagesArray addObject:image];
      }
  }
于 2013-08-11T13:06:23.267 回答