2011-11-22 28 views
0

我试图保存转换(旋转,缩放和移动)UIImageView并将转换加载回屏幕,但根本不起作用。每当我尝试,UIImageView是在不同的地方,因为它应该是。转换为NSStringFromCGAffineTransform

这里是一些代码:从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"]); 

我是怎么了? 也许有人可以帮助我。

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

编辑: 我改变现在的代码: 对于装载

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]; 

但加载图像后,我仍然得到一个小动作。请仍需要一些帮助。

回答

0

的CGAffineTransform可能无效应用转换的视图的框架属性,所以也许你没有存储有用的框架...

0

你不应该混合transformbounds,并且centerframe。例如,将transform设置为一个视图将影响其框架。至于你的UIImageView:它在superview中的位置应该由其center定义。它的旋转/缩放应该由transform定义(为简单起见,不要在转换中使用翻译)。尺寸应该由bounds.size定义。所以,你必须存储三个项目。

+0

你好。感谢您的回答。我将我的代码更改为界限并添加了中心。但仍然没有得到我想要的结果。你可能有一个小例子吗? – Alex

+0

当然,但首先解释什么是“我希望的结果”。记下你的代码,你记录的数字,你期望的数字等。 – debleek63

+0

重新启动应用程序后,我需要重新显示图像查看完全相同的点它被保存。现在,在每次加载时,图像都是几个像素(有时更多,有时更少),远离应该的位置。日志中的位置看起来不错 - 但是视图仍然远离它保存的位置。我在这里删除了代码[链接](http://snipt.org/lgHo9)。感谢您的回答。编辑:它可能与GestureRecognizer有关?理论上的一切应该工作正常... – Alex