首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让用户在4个不同的图像视图xcode上更改背景

让用户在4个不同的图像视图xcode上更改背景
EN

Stack Overflow用户
提问于 2012-11-20 02:45:47
回答 1查看 336关注 0票数 0

我正在尝试制作一个有4个ImageViews的应用程序,我想让用户通过按下每个ImageViews下面的UIButton来更改不同ImageView上的背景。我从一篇教程中为此编写了一个代码,其中显示了只使用一个ImageView就可以做到这一点。我只是为每个按钮复制和粘贴了4次,并更改了一些变量。但当我运行它时,即使我按下第二个、第三个或第四个ImageView的UIButton,也只有第一个ImageView会改变它的图片。代码如下:

代码语言:javascript
复制
#import "ViewController.h"

@interface ViewController ()
{
UIImagePickerController *imagePickerController;
UIImagePickerController *imagePickerController2;
UIImagePickerController *imagePickerController3;
UIImagePickerController *imagePickerController4;
}

@end

@implementation ViewController
@synthesize firstImageView, secondImageView, thirdImageView, fourthImageView;
- (void)viewDidLoad
{
[super viewDidLoad];

}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];

}

- (IBAction)firstChangeButton:(id)sender
{
imagePickerController = [[UIImagePickerController alloc]init];
[imagePickerController setDelegate:self];
[imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:imagePickerController animated:YES completion:nil];

}
- (IBAction)secondChangeButton:(id)sender
{
imagePickerController2 = [[UIImagePickerController alloc]init];
[imagePickerController2 setDelegate:self];
[imagePickerController2 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:imagePickerController2 animated:YES completion:nil];

}
- (IBAction)thirdChangeButton:(id)sender
{
imagePickerController3 = [[UIImagePickerController alloc]init];
[imagePickerController3 setDelegate:self];
[imagePickerController3 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:imagePickerController3 animated:YES completion:nil];

}
- (IBAction)fourthChangeButton:(id)sender
{
imagePickerController4 = [[UIImagePickerController alloc]init];
[imagePickerController4 setDelegate:self];
[imagePickerController4 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:imagePickerController4 animated:YES completion:nil];

}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image1 = [info objectForKey:UIImagePickerControllerOriginalImage];

NSData *data = UIImagePNGRepresentation(image1);
NSString *myGrabbedImage = @"myGrabbedImage.png";
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [path objectAtIndex:0];
NSString *fullPathToFile = [documentDirectory stringByAppendingPathComponent:myGrabbedImage];

[data writeToFile:fullPathToFile atomically:YES];

[[self firstImageView]setImage:image1];

[self dismissViewControllerAnimated:YES completion:nil];

}
- (void)imagePickerController2:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info2
{
UIImage *image2 = [info2 objectForKey:UIImagePickerControllerOriginalImage];

NSData *data2 = UIImagePNGRepresentation(image2);
NSString *myGrabbedImage2 = @"myGrabbedImage2.png";
NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory2 = [path2 objectAtIndex:0];
NSString *fullPathToFile2 = [documentDirectory2 stringByAppendingPathComponent:myGrabbedImage2];

[data2 writeToFile:fullPathToFile2 atomically:YES];

[[self secondImageView]setImage:image2];

[self dismissViewControllerAnimated:YES completion:nil];

}
- (void)imagePickerController3:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info3
{
UIImage *image3 = [info3 objectForKey:UIImagePickerControllerOriginalImage];

NSData *data3 = UIImagePNGRepresentation(image3);
NSString *myGrabbedImage3 = @"myGrabbedImage3.png";
NSArray *path3 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory3 = [path3 objectAtIndex:0];
NSString *fullPathToFile3 = [documentDirectory3 stringByAppendingPathComponent:myGrabbedImage3];

[data3 writeToFile:fullPathToFile3 atomically:YES];

[[self thirdImageView]setImage:image3];

[self dismissViewControllerAnimated:YES completion:nil];

}
- (void)imagePickerController4:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info4
{
UIImage *image4 = [info4 objectForKey:UIImagePickerControllerOriginalImage];

NSData *data4 = UIImagePNGRepresentation(image4);
NSString *myGrabbedImage4 = @"myGrabbedImage4.png";
NSArray *path4 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory4 = [path4 objectAtIndex:0];
NSString *fullPathToFile4 = [documentDirectory4 stringByAppendingPathComponent:myGrabbedImage4];

[data4 writeToFile:fullPathToFile4 atomically:YES];

[[self fourthImageView]setImage:image4];

[self dismissViewControllerAnimated:YES completion:nil];

}

@end

我应该如何将它应用于所有4个ImageViews?提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 03:09:37

问题是所有的图像拾取器都会调用相同的委托方法:

代码语言:javascript
复制
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

当您为图像拾取器控制器设置代理时,如下所示:

代码语言:javascript
复制
[imagePickerController setDelegate:self];

您基本上告诉图像拾取器控制器,self将能够响应图像拾取器委托方法。正如您在UIImagePickerControlDelegate中看到的,没有这样的东西:

代码语言:javascript
复制
– imagePickerController2:didFinishPickingMediaWithInfo:

诸若此类。

首先,我建议重写您的委托方法,如下所示:

代码语言:javascript
复制
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image1 = [info objectForKey:UIImagePickerControllerOriginalImage];

    NSData *data = UIImagePNGRepresentation(image1);
    NSString *myGrabbedImage = @"myGrabbedImage.png";
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [path objectAtIndex:0];
    NSString *fullPathToFile = [documentDirectory stringByAppendingPathComponent:myGrabbedImage];

    [data writeToFile:fullPathToFile atomically:YES];

    if (picker == imagePickerController) {
        [[self firstImageView]setImage:image1];
    } else if (picker == imagePickerController2) {
        [[self secondImageView]setImage:image1];
    } else if (picker == imagePickerController3) {
        [[self thirdImageView]setImage:image1];
    } else {
        [[self fourthImageView]setImage:image1];
    }

    [self dismissViewControllerAnimated:YES completion:nil];

}

这样,所有图像拾取器图像都将由相同的方法处理,从而减少代码量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13460120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档