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 に答える