2012-05-10 2 views
0

У меня есть подкласс UIView (я буду называть его aView), который включает UITextView. Пользователь может изменять размер и поворачивать aView по мере необходимости, и цель состоит в том, чтобы приложение восстанавливало aView точно в том же месте, размере и вращении, поскольку это был последний раз, когда пользователь запускал приложение.Как правильно восстановить размер, начало и вращение подкласса 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

ответ

0

Для повернутых просмотров frame свойство может быть не то, что вы ожидаете, что это будет - как это рассчитывается на основе границ зрения, центра и преобразующих свойств. Попробуйте сохранить и восстановить bounds собственность Вид, вместо того чтобы frame как это не влияет на преобразование вида в

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

... 

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

Владимир, я просто попытался, что и в основном получили те же результаты. – skantner

+0

@skantner, dunno then :(попробуйте проверить отладчик, какое значение станет неправильным ... – Vladimir

Смежные вопросы