Уменьшение размера анимации UILabel - PullRequest
9 голосов
/ 21 июля 2010

При увеличении высоты этикетки все нормально и плавно.При уменьшении метка мгновенно меняет размер, а затем перемещается с анимацией.

@interface
@property (nonatomic, retain) IBOutlet UILabel *explanationLabel;

@implementation
CGRect frmExpl = explanationLabel.frame;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.75];

frmExpl.size.height -= height;
explanationLabel.frame = frmExpl;

[UIView commitAnimations];  

Я пытался заменить UILabel на UIView, и, конечно, такой проблемы с UIView нет.Есть ли какой-нибудь особый способ оживить уменьшение размера UILabel?

Вот минимальный проект, демонстрирующий описанную проблему. Скачать

Ответы [ 3 ]

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

Проблема в том, что UILabel перерисовывает себя, как только изменяется его размер.(Он не может перерисовывать каждый кадр анимации, потому что рендеринг текста происходит на процессоре, а не на графическом процессоре, где запускаются анимации UIView.) Вы можете предотвратить его перерисовку, изменив свойство метки contentMode на, например, UIViewContentModeCenter.

2 голосов
/ 25 октября 2012

Используйте CGAffineTransform для этого.

[UIView animateWithDuration:1.0 animations:^{
    // Scale down 50%
    label.transform = CGAffineTransformScale(label.transform, 0.5, 0.5);
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1.0 animations:^{
        // Scale up 50%
        label.transform = CGAffineTransformScale(label.transform, 2, 2);
    }];
}];
2 голосов
/ 22 июля 2010

Я думаю, что вы хотите изменить границы, а не рамки.Из документов:

"Прямоугольник границ определяет начало координат и масштаб в системе координат представления внутри прямоугольника его рамки и измеряется в точках. Установка этого свойства соответствующим образом изменяет значение свойства рамки."- класс UIView;свойство границ

Попробуйте что-то вроде:

- (void)animate:(id)sender
{
    ...
    CGRect newBounds = testLabel.bounds;
    newBounds.size.height += 50;
    testLabel.bounds = newBounds;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...