0

我有一个包含 UITextView 的 UIView 子类(我称之为 aView)。用户可以根据需要调整和旋转 aView,目标是让应用程序将 aView 恢复到与用户上次运行应用程序时完全相同的位置、大小和旋转。

我的编码如下所示:

[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 以便可以看到框架)。旋转似乎是正确的,但原点和帧大小不正确。我不确定我做错了什么?

前

后

4

1 回答 1

0

对于旋转视图的frame属性可能不是您所期望的 - 因为它是根据视图的边界、中心和变换属性计算的。尝试保存和恢复视图的bounds属性,而不是frame因为它不受视图转换的影响

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

...

CGRect bounds = [decoder decodeCGRectForKey:@"annotationBounds"];
...
self.view.bounds = bounds;
于 2012-05-10T12:43:32.043 回答