如何正确恢复UIView子类的大小,原点和旋转?

如何正确恢复UIView子类的大小,原点和旋转?

问题描述:

我有一个UIView的子类(我将它称为一个视图),其中包括一个UITextView。用户可以根据需要调整大小和旋转视图,目标是让应用程序将视图精确地还原到与用户上次运行应用程序时相同的位置,大小和旋转角度。如何正确恢复UIView子类的大小,原点和旋转?

我的编码是这样的:

[encoder encodeCGRect:self.view.frame forKey:@"annotationFrame"]; 
[encoder encodeCGPoint:self.view.center forKey:@"annotationCenter"]; 
[encoder encodeCGRect:self.textView.frame forKey:@"textViewFrame"]; 
[encoder encodeCGAffineTransform:self.view.transform forKey:@"transform"]; 

和的initWithCoder:

CGRect frame = [decoder decodeCGRectForKey:@"annotationFrame"]; 
    CGPoint center = [decoder decodeCGPointForKey:@"annotationCenter"]; 
    CGRect tvframe = [decoder decodeCGRectForKey:@"textViewFrame"]; 
    CGAffineTransform transform = [decoder decodeCGAffineTransformForKey:@"transform"]; 

    self.view.frame = frame; 
    self.view.center = center; 
    self.view.transform = transform; 
    self.textView.frame = tvframe; 

但这里是什么 '之前' 和 '之后' 的样子:(我已经添加bgcolors所以帧可以看到)。旋转似乎是正确的,但原点和框架大小不正确。我不确定我做错了什么?

before

after

对于旋转的观点frame财产可能不是你希望它是什么 - 因为它是基于视图边界,中心和转换属性计算。尽量节约和替代frame恢复视图的bounds财产,因为它不会受到视图的转型

[encoder encodeCGRect:self.view.bounds forKey:@"annotationBounds"]; 

... 

CGRect bounds = [decoder decodeCGRectForKey:@"annotationBounds"]; 
... 
self.view.bounds = bounds; 
+0

弗拉基米尔,我只是去尝试,基本上得到了相同的结果。 – skantner

+0

@skantner,dunno then :(尝试检查调试器什么值变成错误... – Vladimir