Image 在一个视图上使用多个图像选择器
我有一个可以工作的图像采集器,在按下按钮并按住手势时,允许用户将图像上传到磁盘,用户可以使用相同的手势更改图像。但是,唯一的问题是,我需要在同一个视图上执行两次此操作(即,我有两个ImageView,两个按钮来更改每个ImageView,等等),而如何使第二个工作起来,我遇到了难题。这基本上就是视图的外观: 这是我目前的代码:Image 在一个视图上使用多个图像选择器,image,uiimagepickercontroller,Image,Uiimagepickercontroller,我有一个可以工作的图像采集器,在按下按钮并按住手势时,允许用户将图像上传到磁盘,用户可以使用相同的手势更改图像。但是,唯一的问题是,我需要在同一个视图上执行两次此操作(即,我有两个ImageView,两个按钮来更改每个ImageView,等等),而如何使第二个工作起来,我遇到了难题。这基本上就是视图的外观: 这是我目前的代码: - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMed
- (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。就像我说的,给每个采摘者都贴上标签。当委托被调用时,根据标记分别处理它们。有关更多详细信息,请查看此链接: