如何为同一视图中的每个 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 分配从相机拍摄的照片?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 UICollectionViewFlowLayout 中的每个单元格添加标题/标签补充视图?