【问题标题】:Save multiple custom UIImageViews保存多个自定义 UIImageViews
【发布时间】:2011-12-12 13:45:34
【问题描述】:

我最近在检查here 找到的“演示照片板”项目。

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

我像这样添加视图:

    - (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 那样做吗?我不太确定我是否完全理解了您的问题,您是在问如何归档添加到您的视图中的多个 imageView?
  • 我提供的示例允许用户在每次从照片库中选择照片时将 uiimageview 添加到屏幕上。所有这些图像视图本质上都是“图像视图”(参见上面的代码)。我无法弄清楚的是如何区分这些不同的图像视图。目前它只保存添加的最新视图......即使屏幕上也有其他 uiimageviews。我想我可以在每次选择其他照片时在新的 uiimageview 中编码,但是我必须限制允许添加多少 uiimageview。

标签: objective-c uiimageview persistence nskeyedarchiver


【解决方案1】:

我真的不认为您想将整个 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];

【讨论】:

  • 感谢您的回复。您将整个 UIImageView 调整为用户默认值是正确的。我也很欣赏您保存各种图像的更好方法的示例。我想澄清的是如何区分屏幕上的各种 UIImageviews。我上面提供的代码允许用户添加多个 UIImageviews 都具有“imageview”的名称。
【解决方案2】:

要区分屏幕上的 UIImageView,您可以执行以下操作。

定义起始ImageView标签号

#define kImageViewTag 3000

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

NSUInteger numberOfImage = 0

每当你创建一个新的 UIImageView 时,增加计数并将其与 kImageViewTag 一起添加并将其分配给 tag 属性。

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;

每当您枚举屏幕子视图时,如果类是标签 >= kImageViewTag 的 UIImageView,您就知道这些是从 UIImagePickerController 添加到屏幕的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多