Как определить, когда размер UIView изменился? - PullRequest
5 голосов
/ 27 января 2010

У меня есть UIViewController, который инициализирован с правильным фреймом, однако где-то в моем коде фрейм искажен, и мне трудно найти, где.

В подобных ситуациях обычно удобно watch переменную в отладчике, однако у меня нет способа получить доступ к свойству controller-> view-> frame в моем представлении переменной, так как это не переменная, это свойство (как ни удивительно)

Детализация в UIView на экране переменных показывает несколько вещей, но я ничего не могу связать с кадром, я подумал, что, возможно, это будет в layer, но это не так.

Есть ли способ следить за изменениями в частном API? Наверное, нет, поскольку переменные по сути являются «скрытыми», и поэтому вы не можете точно указать, что именно watch.

В качестве альтернативы, какой другой подход я мог бы использовать? Я уже пробовал создавать подклассы UIView, устанавливая представление моего UIViewController так, чтобы оно указывало на этот подкласс, и нарушая метод setFrame, но, похоже, он не работал.

РЕДАКТИРОВАТЬ: метод подкласса UIView DID работает, мне просто нужно было установить представление, чтобы указать на мой тестовый подкласс в viewDidLoad, а не метод init. Оставляя этот вопрос открытым, я не уверен, что это лучший способ решения этой проблемы ...

Ответы [ 3 ]

6 голосов
/ 19 июля 2011

Подкласс вашего представления вы хотите отслеживать и переписать метод setFrame:

@implementation MyTableView

- (void)setFrame:(CGRect)frame;
{
    NSLog(@"%@", frame);
    [super setFrame:frame];
}

@end

Затем используйте отладчик, чтобы добавить к нему точку останова и проверить, когда он вызывается. В конце концов, вы увидите, когда будет изменен фрейм и откуда происходит это изменение.

1 голос
/ 20 июля 2011

Я обнаружил, что это можно сделать с помощью наблюдателей значения ключа.

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html

0 голосов
/ 27 января 2010

Вы можете создать ivar, view2 и просто назначить его своему виду в вашем методе loadView. Это должно позволить вам смотреть его как обычную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...