Анимация пользовательского интерфейса IOS

#iphone #ios

#iPhone #iOS

Вопрос:

 - (void)showLabelAnimation
{
[UIView beginAnimations:@"animationID" context:nil];

[UIView setAnimationDuration:1];

//original rectangle is (0,0,100,50)

//and I want to change label to (100,100,200,100)
label.bounds = CGRectMake(100, 100, 200, 100);
label.frame = CGRectMake(100, 100, 200, 100);

[UIView commitAnimations];
}
 

Это работает хорошо, но мне просто интересно, почему я должен устанавливать как границы, так и рамки метки. Они кажутся одним и тем же.
Может ли кто-нибудь объяснить это для меня?
Заранее благодарю.

[Правка от 3 ноября] Спасибо за вашу помощь, но когда я удаляю строку setbounds, она работает плохо, метка сразу становится большой, но перемещается в новую позицию с помощью анимации. Анимация изменения размера не отображается.

Это настоящая вещь, которая меня удивляет.

Комментарии:

1. отредактировал мой ответ, чтобы включить дополнительную информацию о вашем редактировании

Ответ №1:

Вам нужно будет только установить рамку. Границы должны обновляться сами по себе.

Редактировать для получения дополнительной справки: метки не масштабируются; изменение его рамки изменяет место размещения текста, но размер текста не масштабируется таким образом.

Однако вы можете присвоить свойству UILabel adjustsFontSizeToFitWidth значение «да», а затем перед запуском анимации установить максимальный размер шрифта перед ее запуском. По мере масштабирования размер шрифта должен изменяться, чтобы соответствовать размеру и достичь желаемого эффекта.

Комментарии:

1. Спасибо, я попробую, хотя я все еще в замешательстве.

2. Для простого объяснения того, как это работает: в XIB-файле создайте надпись с очень большим размером шрифта (например, 80) и установите флажок «Сжать текст по размеру». Затем с помощью мыши измените размер окна. Вы увидите, как текст меняет размер вместе с полем. Анимация пользовательского интерфейса, которую вы используете здесь, фактически эквивалентна изменению размера окна с помощью мыши.

Ответ №2:

Рамка представляет собой прямоугольник относительно родительского представления. Границы — это прямоугольник относительно самого себя.

Анимация должна работать без строки

 label.bounds = CGRectMake(100, 100, 200, 100);
 

Ответ №3:

Этот код работает для меня

     [UIView animateWithDuration:1
                 animations:^(void) {
                     self.leLabel.frame = CGRectMake(labFrame.origin.x, 
                        labFrame.origin.y   100.0f, labFrame.size.width   50.0f, labFrame.size.height);
                 }];
 

Для того, что вы хотите сделать, вам нужно только установить рамку.
Если я изменю фрейм на привязку в предыдущем коде, я получу очень странное поведение.

Итак, я предполагаю, что причина, по которой вам нужно установить оба, заключается в том, что вы сначала протестировали с привязкой и добавили фрейм после, чтобы исправить ошибку, вызванную настройкой привязки.

Комментарии:

1. Этот код будет работать только на iOS 4.x и выше, где поддерживаются блоки; хотя немногие пользователи все еще используют 3.x, я все же думаю, что это стоит упомянуть (особенно если это единственное место в вашем приложении, где 3.x не будет поддерживаться)

2. Хороший момент. На днях я понял, что iPod моей жены второго поколения. работал под управлением iOS 4.2. Поэтому в тот раз я решил прекратить поддержку менее 4.0, поэтому я всегда забываю проверить этот аспект.