如何为同一视图中的每个 UIImageView 分配从相机拍摄的照片?

Posted

技术标签:

【中文标题】如何为同一视图中的每个 UIImageView 分配从相机拍摄的照片?【英文标题】:how I can assign for each UIImageView in the same view a picture taken from camera? 【发布时间】:2013-11-10 16:12:18 【问题描述】:

我在同一个视图中有两个 UIImageView。对于每个 imageView,我应该分配一张从相机或照片库中拍摄的图片。 当我开始这样做时,我会为两个 imageView 获得相同的照片。

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

    [picker dismissViewControllerAnimated:YES completion:nil];
    imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    imageView2.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

 


-(IBAction)addPhoto:(id)sender

    UIActionSheet *actionSheet =[[UIActionSheet alloc]initWithTitle:@"" delegate:self cancelButtonTitle:@"cancel" destructiveButtonTitle:@"Choose Photo" otherButtonTitles:@"Take Photo ", nil];


    [actionSheet showInView:self.view];



- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    shouldUpdateFirstImage =YES;
    // chosenImage = info[UIImagePickerControllerEditedImage];
    [picker dismissViewControllerAnimated:YES completion:nil];

  if (shouldUpdateFirstImage) 
        imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        shouldUpdateFirstImage = NO;
    
    else 
        pictureView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

        shouldUpdateFirstImage = YES;
    



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    if([title isEqualToString:@"Put Picture"])
    
        alrtView.hidden = YES;
        pictureView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,100,100)];
       [self.view addSubview:pictureView];
        [self addPhoto:self];
    

还有viewController.h

@interface ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate,UIActionSheetDelegate,UITextViewDelegate>


    BOOL shouldUpdateFirstImage;


第一个 ImageView 是背景。通过 AlertView,我选择将图片添加到第一个 ImageView。之后,我调用相同的操作表来选择拍摄的照片。

【问题讨论】:

只需将图像分配给其中一个图像视图,而不是两者。 第二个呢?怎么区分两个imageview?? 当用户选择另一张图片时,您分配第二个。 当用户选择另一个图像时,第一个图像会改变。你能解释一下吗? 【参考方案1】:

TL;DR,您需要跟踪类的状态,并让您的委托方法相应地响应该状态。

听起来您需要您的类来跟踪已显示的图像数量,并根据该信息加载新的选择。我们称之为“状态”,您必须为您的 imagePickerController 委托方法实现逻辑以适当地响应该状态。

一种可能的方法是将 BOOL 范围限定为您的类(ivar 或属性都可以,但 ivar 可能更合适),然后使用它的值来跟踪应该更新哪个 imageView。

假设您已经声明了一个名为 shouldUpdateFirstImage 的 BOOL,您可以执行以下操作:

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

[picker dismissViewControllerAnimated:YES completion:nil];

if (shouldUpdateFirstImage) 
        imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        shouldUpdateFirstImage = NO;
    
else 
    imageView2.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    shouldUpdateFirstImage = YES;
      

这将在每次连续选择时交替更新哪个 imageView。

【讨论】:

我试过那个方法,但不幸的是我得到了两个 UImageview 相同的图像。 您的 BOOL 范围是您的课程还是您的方法?如果它的范围是方法,那么每次都会重新创建它并且不会交替。 对不起,我误会了你?我在 .h 中声明 BOOL,然后我分配 shouldUpdateFirstImage =YES; 你用来跟踪状态的变量需要比你的方法调用存在更长的时间,所以它们通常归类所有。那么你的方法应该根据状态表现不同。如果您希望我们提供帮助,请发布您创建状态变量的代码,以及您如何在方法中响应它们,以便我们了解您在做什么 我找到了问题,谢谢,我只是将 shouldUpdateFirstImage =YES 放在 viewdidload 中,效果很好,谢谢【参考方案2】:

试试这个

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

      [picker dismissViewControllerAnimated:YES completion:nil];

 if(imageView.image)
    imageView2.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
 else
    imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];


【讨论】:

评估 if(imageView.image) 只是检查 imageView 的 image 属性是否存在。对于确实存在的图像视图,这将始终返回 YES。这就是为什么您需要使用像 BOOL 这样可以跟踪的状态变量。

以上是关于如何为同一视图中的每个 UIImageView 分配从相机拍摄的照片?的主要内容,如果未能解决你的问题,请参考以下文章

如何为圆形UIImageView创建半圆边框?

iOS - 如何为头像创建分层图像

如何为 UIImageView 中的图像变化设置动画?

如何为 UICollectionViewFlowLayout 中的每个单元格添加标题/标签补充视图?

Odoo 13:如何为同一产品使用每个公司的不同重量单位计量单位

如何为我在回收站视图中的卡片视图中的每个项目创建一个点击监听器