Сохранить несколько пользовательских UIImageViews - PullRequest
1 голос
/ 12 декабря 2011

Я недавно изучал проект "Demo Photo Board" нашел здесь .

Это простая демонстрация добавления UIImageViews на экран с добавленными в них UIGestureRecognizer ... позволяющими пользователю манипулировать различными 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"];

Теперь мой вопрос: следующий метод сохраняет только последнее изображение, добавленное на экран. Кто-нибудь знает, как сохранить все изображения, отображаемые на экране ... если пользователь добавляет более одного?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

Чтобы различить UIImageViews на экране, вы можете сделать следующее.

Определение начального номера тега ImageView

#define kImageViewTag 3000

Определение экземпляра var для количества изображений, добавляемых на экран.

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.

0 голосов
/ 12 декабря 2011

Я действительно не думаю, что вы хотите сохранить весь объект 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];
...