Image 在一个视图上使用多个图像选择器

Image 在一个视图上使用多个图像选择器,image,uiimagepickercontroller,Image,Uiimagepickercontroller,我有一个可以工作的图像采集器,在按下按钮并按住手势时,允许用户将图像上传到磁盘,用户可以使用相同的手势更改图像。但是,唯一的问题是,我需要在同一个视图上执行两次此操作(即,我有两个ImageView,两个按钮来更改每个ImageView,等等),而如何使第二个工作起来,我遇到了难题。这基本上就是视图的外观: 这是我目前的代码: - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMed

我有一个可以工作的图像采集器,在按下按钮并按住手势时,允许用户将图像上传到磁盘,用户可以使用相同的手势更改图像。但是,唯一的问题是,我需要在同一个视图上执行两次此操作(即,我有两个ImageView,两个按钮来更改每个ImageView,等等),而如何使第二个工作起来,我遇到了难题。这基本上就是视图的外观:

这是我目前的代码:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//
// Saving into Documents folder
//
NSString* path = [NSHomeDirectory() stringByAppendingString:@"/Documents/first.png"];

BOOL ok = [[NSFileManager defaultManager] createFileAtPath:path
                                                  contents:nil attributes:nil];

if (!ok) {
    NSLog(@"Error creating file %@", path);
} else {
    NSFileHandle* myFileHandle = [NSFileHandle fileHandleForWritingAtPath:path];
    [myFileHandle writeData:UIImagePNGRepresentation(info [UIImagePickerControllerOriginalImage])];
    [myFileHandle closeFile];
}

//
// Loading from documents
//
NSFileHandle* myFileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
UIImage* loadedImage = [UIImage imageWithData:[myFileHandle readDataToEndOfFile]];
self.chosenImage = loadedImage;
[self.imageView setImage:self.chosenImage];
[self dismissViewControllerAnimated:YES completion:nil];
}

- (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:nil];
}

- (void)onLongTile:(UILongPressGestureRecognizer *)gesture
{
switch ([gesture state]) {
    case UIGestureRecognizerStateBegan:{
        NSString *actionSheetTitle = @"Photo Options"; //Action Sheet Title
        NSString *type = @"Upload Photo";
        NSString *cancelTitle = @"Cancel";
        UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                      initWithTitle:actionSheetTitle
                                      delegate:self
                                      cancelButtonTitle:cancelTitle
                                      destructiveButtonTitle:nil
                                      otherButtonTitles:type, nil];
        [actionSheet showInView:self.view];            }

}
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
if  ([buttonTitle isEqualToString:@"Photo"]) {
    self.imagePicker = [[UIImagePickerController alloc] init];
    self.imagePicker.delegate = self;
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:self.imagePicker animated:YES completion:nil];
}
}
使用标记更新代码:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

if (self.imageViewOne.tag == 100)
{
    //
    // Saving into Documents folder
    //
    NSString* path = [NSHomeDirectory() stringByAppendingString:@"/Documents/one.png"];

    BOOL ok = [[NSFileManager defaultManager] createFileAtPath:path
                                                      contents:nil attributes:nil];

    if (!ok) {
        NSLog(@"Error creating file %@", path);
    } else {
        NSFileHandle* myFileHandle = [NSFileHandle fileHandleForWritingAtPath:path];
        [myFileHandle writeData:UIImagePNGRepresentation(info [UIImagePickerControllerOriginalImage])];
        [myFileHandle closeFile];
    }

    //
    // Loading from documents
    //
    NSFileHandle* myFileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
    UIImage* loadedImage = [UIImage imageWithData:[myFileHandle readDataToEndOfFile]];
    self.chosenImageOne = loadedImage;
    [self.imageViewOne setImage:self.chosenImageOne];
    [self dismissViewControllerAnimated:YES completion:nil];
}
if (self.imageViewTwo.tag == 200)
{
    //
    // Saving into Documents folder
    //
    NSString* path = [NSHomeDirectory() stringByAppendingString:@"/Documents/two.png"];

    BOOL ok = [[NSFileManager defaultManager] createFileAtPath:path
                                                      contents:nil attributes:nil];

    if (!ok) {
        NSLog(@"Error creating file %@", path);
    } else {
        NSFileHandle* myFileHandle = [NSFileHandle fileHandleForWritingAtPath:path];
        [myFileHandle writeData:UIImagePNGRepresentation(info [UIImagePickerControllerOriginalImage])];
        [myFileHandle closeFile];
    }

    //
    // Loading from documents
    //
    NSFileHandle* myFileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
    UIImage* loadedImage = [UIImage imageWithData:[myFileHandle readDataToEndOfFile]];
    self.chosenImageTwo = loadedImage;
    [self.imageViewTwo setImage:self.chosenImageTwo];
    [self dismissViewControllerAnimated:YES completion:nil];
}

}

根据我对这个问题的理解,将标签设置到您的
UIImageView
,并相应地进行更改。比如:

[self.imageViewOne setTag:100];
[self.imageViewTne setTag:200];
然后在代理中,您可以检查标记值并执行必要的操作:

if ( imageView.tag == 100)
{
    // Code for first imageView
}

很抱歉,我对objective-c比较陌生。我将imageViewOne和imageViewTwo设置为给定的标记,并尝试在imagePickerController方法中实现它们。当我测试它时,现在每当我单击任一按钮(即更改imageViewOne的按钮和更改imageViewTwo的按钮)时,它都会将相同的图像上载到两个点。我将更新后的代码添加到我原来的帖子中。如果您能帮助解决此问题,我们将不胜感激,谢谢!你想做什么?你有两张图片,对吗?因此,当您单击顶部按钮时,您希望将图像加载到第一个imageView,当您单击第二个按钮时,您希望将另一个选定的图像加载到第二个imageView?一种方法是安装两个UIImagePickerController。就像我说的,给每个采摘者都贴上标签。当委托被调用时,根据标记分别处理它们。有关更多详细信息,请查看此链接: