2012-07-29 63 views
2

我有2个图像视图(imageview & imageview2)和2个uibuttons(useCameraRoll & useCameraRoll2)我已经实现了使用2个按钮在这些视图上设置图像的代码。使用UIImagePickerController进行多个uiimageviews。 (使用多个UIButton)

imageview与其按钮useCameraRoll一起工作良好,但是当我使用useCameraRoll2设置图像时,它会更改imageview的图像而不是imageview2。

代码视图/按钮1:视图/按钮2

- (IBAction) useCameraRoll: (id)sender 
{ 
    if ([self.popoverController isPopoverVisible]) { 
     [self.popoverController dismissPopoverAnimated:YES]; 
    } else { 
     if ([UIImagePickerController isSourceTypeAvailable: 
      UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
     { 
      UIImagePickerController *imagePicker = 
      [[UIImagePickerController alloc] init]; 
      imagePicker.delegate = self; 
      imagePicker.sourceType = 
      UIImagePickerControllerSourceTypePhotoLibrary; 
      imagePicker.mediaTypes = [NSArray arrayWithObjects: 
             (NSString *) kUTTypeImage, 
             nil]; 
      imagePicker.allowsEditing = NO; 

      self.popoverController = [[UIPopoverController alloc] 
             initWithContentViewController:imagePicker]; 

      self.popoverController.delegate = self; 

      [self.popoverController presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

      newMedia = NO; 
     } 
    } 
} 





#pragma mark - 
#pragma mark UIImagePickerControllerDelegate 

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


{ 
    [self.popoverController dismissPopoverAnimated:true]; 
    NSString *mediaType = [info 
          objectForKey:UIImagePickerControllerMediaType]; 
    // [self dismissModalViewControllerAnimated:YES]; 
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { 
     UIImage *image = [info 
          objectForKey:UIImagePickerControllerOriginalImage]; 

     self.imageView.image = image; 
     if (newMedia) 
      UIImageWriteToSavedPhotosAlbum(image, 
              self, 
              @selector(image:finishedSavingWithError:contextInfo:), 
              nil); 
    } 
    else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) 
    { 
     // Code here to support video if enabled 
    } 
} 

代码:

- (IBAction) useCameraRoll2: (id)sender 
{ 
    if ([self.popoverController2 isPopoverVisible]) { 
     [self.popoverController2 dismissPopoverAnimated:YES]; 
    } else { 
     if ([UIImagePickerController isSourceTypeAvailable: 
      UIImagePickerControllerSourceTypeSavedPhotosAlbum]) 
     { 
      UIImagePickerController *imagePicker2 = 
      [[UIImagePickerController alloc] init]; 
      imagePicker2.delegate = self; 
      imagePicker2.sourceType = 
      UIImagePickerControllerSourceTypePhotoLibrary; 
      imagePicker2.mediaTypes = [NSArray arrayWithObjects: 
             (NSString *) kUTTypeImage, 
             nil]; 
      imagePicker2.allowsEditing = NO; 

      self.popoverController2 = [[UIPopoverController alloc] 
             initWithContentViewController:imagePicker2]; 

      self.popoverController2.delegate = self; 



      [self.popoverController2 presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

      newMedia = NO; 
     } 
    } 
} 


#pragma mark - 
#pragma mark UIImagePickerControllerDelegate 

-(void)imagePickerController2:(UIImagePickerController *)picker2 
didFinishPickingMediaWithInfo:(NSDictionary *)info2 
{ 
    [self.popoverController2 dismissPopoverAnimated:true]; 
    NSString *mediaType2 = [info2 
          objectForKey:UIImagePickerControllerMediaType]; 
    // [self dismissModalViewControllerAnimated:YES]; 
    if ([mediaType2 isEqualToString:(NSString *)kUTTypeImage]) { 
     UIImage *image2 = [info2 
          objectForKey:UIImagePickerControllerOriginalImage]; 

     self.imageView2.image = image2; 
     if (newMedia2) 
      UIImageWriteToSavedPhotosAlbum(image2, 
              self, 
              @selector(image:finishedSavingWithError:contextInfo:), 
              nil); 
    } 
    else if ([mediaType2 isEqualToString:(NSString *)kUTTypeMovie]) 
    { 
     // Code here to support video if enabled 
    } 
} 

我已检查,在界面生成器的所有连接被连接到右视图。

有谁知道为什么这是怎么了?

问候

+0

有人有想法吗?这已经在这里2个月 – 2012-10-03 21:14:26

+0

如果我的答案解决了你的问题,也许你应该接受我的答案。否则,请添加评论以告诉解决方案是什么。 – 2013-08-20 21:34:05

回答

5

我认为你的问题可能来自你的委托:您2的UIImagePickerController使用相同的委托,“自我”。下面的方法:

-(void)imagePickerController2:(UIImagePickerController *)picker2 didFinishPickingMediaWithInfo:(NSDictionary *)info2 

其实是从来没有所谓的,是不是为UIImagePickerControllerDelegate一个有效的声明。

您需要区分哪个动作是您的选取器的原点,并在您的单一委托方法的代码中相应地更新适当的图像。只是在每一种情况下呈现拾取之前

UIImageView *_currentPickerTarget 

然后设置这个变量::

也许你可以创建一个实例变量

- (IBAction) useCameraRoll: (id)sender { 
    (...) 
    _currentPickerTarget = imageView; 
} 

- (IBAction) useCameraRoll2: (id)sender { 
    (...) 
    _currentPickerTarget = imageView2; 
} 

然后在你的委托方法你只需更新_currentPickerTarget通过替代:

self.imageView.image = image; 

来自

_currentPickerTarget.image = image; 

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info函数中。

希望这会有所帮助。 Christophe

相关问题