Преобразование в NSStringFromCGAffineTransform - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь сохранить преобразованное (повернутое, масштабированное и перемещенное) UIImageView и загрузить преобразования обратно на экран, но это не работает вообще. Каждый раз, когда я пытаюсь, UIImageView находится в другом месте, как и должно быть.

Вот код:

Сохранение в UserDefaults:

NSUserDefaults * UserDefs = [NSUserDefaults standardUserDefaults];
UIImageView * petit = (UIImageView*)[ConView viewWithTag:1];
[UserDefs setBool:YES forKey:@"gespeichert"];
[UserDefs setObject:NSStringFromCGRect([petit frame]) forKey:@"frame"];
[UserDefs setObject:NSStringFromCGAffineTransform(petit.transform) forKey:@"position1"];
[UserDefs synchronize];

Загрузка из UserDefaults:

CGAffineTransform transformation = CGAffineTransformFromString([UserDefs objectForKey:@"position1"]);
    su.transform = transformation; // "su" is an UIImageView - allocated with Frame from:
    CGRect RectFrame = CGRectFromString([UserDefs objectForKey:@"frame"]);

Что я не так сделал? Может быть, кто-то может мне помочь.

# # # # # # # # # # # # # # #

Edit: Я изменил код сейчас: Для загрузки

CGRect frameGroesse;
    frameGroesse = CGRectFromString([UserDefs objectForKey:@"frame"]);
    UIImageView * su = [[UIImageView alloc] initWithFrame:frameGroesse];
    su.image = [UIImage imageNamed:@"Xcode.jpg"];
    su.contentMode = UIViewContentModeScaleAspectFit;
    su.multipleTouchEnabled = YES;
    su.tag = 1;
    [su setUserInteractionEnabled:YES];
    [self addGestureRecognizersToPiece:su];
    CGAffineTransform transformation = CGAffineTransformFromString([UserDefs objectForKey:@"position1"]);
    su.transform = transformation;
    su.center = CGPointFromString([UserDefs objectForKey:@"center"]);

    [ConView addSubview:su];
    [ConView bringSubviewToFront:su];
    [ConView bringSubviewToFront:[ConView viewWithTag:1]];
    [su release];

Для сохранения:

NSUserDefaults * UserDefs = [NSUserDefaults standardUserDefaults];
UIImageView * petit = (UIImageView*)[ConView viewWithTag:1];
[UserDefs setBool:YES forKey:@"gespeichert"];
[UserDefs setObject:NSStringFromCGRect([petit bounds]) forKey:@"frame"];
[UserDefs setObject:NSStringFromCGPoint(petit.center) forKey:@"center"];

[UserDefs setObject:NSStringFromCGAffineTransform(petit.transform) forKey:@"position1"];
[UserDefs synchronize];

Но после загрузки изображения я все еще получаю небольшое движение. Все еще нужна помощь, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011

Вы не должны смешивать transform, bounds и center с frame. Например, установка transform для вида повлияет на его кадр. Что касается вашего UIImageView: его позиция в суперпредставлении должна быть определена как center. Его вращение / масштаб должны быть определены как transform (не переводите переводы для простоты). Размер должен быть определен как bounds.size. Итак, вы должны хранить три предмета.

0 голосов
/ 22 ноября 2011

CGAffineTransform может сделать недействительным свойство frame для представления, к которому вы применили преобразование, поэтому, возможно, вы не сохраняете полезный кадр ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...