Авторазмер кадра UILabel при анимации кадра (размера) родительского UIView - PullRequest
14 голосов
/ 27 октября 2011

У меня есть родительский UIView, у которого есть дочерний UIView (UILabel, использованный в приведенном ниже коде), чей фрейм имеет границы родительского, а autoresizingMask настроен на гибкие ширину и высоту:

UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
UILabel* childLabel = [[UILabel alloc] initWithFrame:parentView.bounds];
childLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
childLabel.textAlignment = UITextAlignmentCenter;
childLabel.text = @"Hello";

Я хочу иметь возможность анимировать кадр родительского представления, в частности его размер, и изменить размер подпредставления как часть анимации:

[UIView animateWithDuration:1.0 animations:^{ parentView.frame = CGRectMake(0, 0, 160, 240); }];

В результате этой анимации я бы хотел, чтобы текст UILabel анимировался вместе с анимацией родительского представления, поэтому визуально вы увидите, как текст переместится из центра в (160, 240) в (80, 120) , Однако вместо анимации кажется, что для фрейма подпредставления сразу устанавливается значение, которое должно быть в конце анимации, поэтому вы видите, что позиция текста сразу же изменяется при запуске анимации.

Есть ли способ получить подпредставления для автоматического изменения размера как часть анимации?

1 Ответ

20 голосов
/ 28 октября 2011

Я не совсем разбираюсь в том, что происходит, но я думаю, что основная проблема заключается в том, что UIKit не хочет перерисовывать текст каждый кадр анимации, поэтому содержимое UILabel arenне анимационный.По умолчанию свойство contentMode UILabel имеет значение UIViewContentModeRedraw, что означает, что оно будет перерисовывать UILabel с целевым размером, как только свойство будет установлено.

Если вы измените contentMode на UIViewContentModeCenter, содержимое не будетперерисовать и останется в центре UILabel.

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