2011-12-12 35 views
1

我最近检查项目“演示照片局”发现here保存多个自定义的UIImageViews

这是将UIImageView添加到添加了UIGestureRecognizers的屏幕的简单演示...允许用户操作各种UIImageView。

我加的观点,像这样:

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

UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 


imageview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
imageview.userInteractionEnabled = YES; 
[imageview setImage:image]; 

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)]; 
[pinchRecognizer setDelegate:self]; 
[imageview addGestureRecognizer:pinchRecognizer]; 

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)]; 
[rotationRecognizer setDelegate:self]; 
[imageview addGestureRecognizer:rotationRecognizer]; 

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
[panRecognizer setMinimumNumberOfTouches:1]; 
[panRecognizer setMaximumNumberOfTouches:1]; 
[panRecognizer setDelegate:self]; 
[imageview addGestureRecognizer:panRecognizer]; 


[self.view addSubview:imageview]; } 

我甚至可以保存像这样的观点:

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:imageview] forKey:@"imageViewSaved"]; 

现在我的问题:下面的方法仅保存最后的ImageView添加到屏幕。任何人都知道如何保存屏幕上的所有图像...如果用户添加多个图像?

+0

你不能只是做一样的,你已经与第一ImageView的呢?我不太确定,如果我完全理解您的问题,您是否问如何将多个imageView存档添加到您的视图? –

+0

我提供的例子允许用户每次从他们的照片库中选择照片时在屏幕上添加一个uiimageview。所有这些图像浏览本质上都是“imageview”(见上面的代码)。我很难弄清楚如何区分这些不同的图像视图。目前它只保存添加的最新视图...即使其他uiimageviews也在屏幕上。我想我每次选择一张附加照片时都可以在新的图像视图中编码,但是我必须限制允许添加多少个uiimageviews。 – jccotant

回答

0

我真的不认为你想成为拯救整个UIImageView对象指向用户的默认值。相反,请尝试保存一个UIImage对象的列表,这些对象将更加轻量级。 (而这使得更多的意义连载。)

你可以做到这一点,像这样:

NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; 
NSArray *savedArray = [defs objectForKey:@"SAVED_IMAGES"]; 
// Create a mutable version in case the serialized copy is an NSArray 
NSMutableArray *mutableImages = savedArray ? [NSMutableArray arrayWithArray:savedArray] : [NSMutableArray array]; 
[mutableImages addObject:image]; 
[defs setObject:mutableImages forKey:@"SAVED_IMAGES"]; 
[defs save]; 
+0

感谢您的回复。您将整个UIImageView设置为用户默认值是正确的。我也很感激你的更好的方式来保存各种图像的例子。我想澄清的是我如何区分屏幕上的各种UIImageviews。我上面介绍的代码允许用户添加多个UIImageviews,名称均为“imageview”。 – jccotant

0

为了区别,你可以做以下的屏幕上的UIImageViews。

定义开始ImageView的标签号码

#define kImageViewTag 3000 

定义添加到屏幕图像的数量实例变种。

NSUInteger numberOfImage = 0 

当你创建一个新的UIImageView,增加了计数,并与kImageViewTag添加它,并把它分配给标记属性。

imageview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
imageview.userInteractionEnabled = YES; 
[imageview setImage:image]; 
numberOfImage += 1; 
imageView.tag = kImageViewTag + numberOfImage; 

每当你列举屏幕子视图,如果类的UIImageView与标签> = kImageViewTag,你知道这些都是图像添加到从的UIImagePickerController屏幕。