Подтвердить что ты не робот

Автоматизация кадра UILabel при анимации кадра (размера) родительского UIView

У меня есть родительский 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";

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

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

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

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

4b9b3361

Ответ 1

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

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

childLabel.contentMode = UIViewContentModeCenter;