UIView Анимация начинается с неправильных значений свойств - PullRequest
1 голос
/ 08 сентября 2011

Привет, у меня возникли проблемы с кодированием анимации для UIView в моем приложении для iPhone. Я пытаюсь установить анимацию для фрейма UIView после того, как я обновил свойство фрейма. Вот код.

//old frame values are: 0, 0, 15, 37

//set the frame for hiding the arrow
[arrow setFrame:CGRectMake(-15, 100, 15, 37)];

//Create an animation to let the arrow slide in the view.
[UIView beginAnimations:@"SlideInArrow" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationBeginsFromCurrentState:true];
[UIView setAnimationDuration:1.0];
[symbolArrow setFrame:CGRectMake(0, 100, 18, 37)];
[UIView commitAnimations];

этот код является частью метода, который я написал. Он будет запущен, когда пользователь нажимает кнопку. Я полагаю, что пользовательский интерфейс не будет обновлять новые значения кадра для объекта. Вместо анимации используются старые значения. Почему это так? Есть ли способ получить представление или анимацию для получения новых значений кадра?

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Вы устанавливаете animationBeginsFromCurrentState:, который явно указывает системе анимировать в зависимости от того, где в данный момент находится экран. На данный момент кадр все еще находится в {0,0}, потому что цикл выполнения не завершен, поэтому ни одна из ваших предыдущих транзакций setFrame: не была применена. Во-первых, возьмите эту строку, которая может исправить это сама. Если нет, есть другие способы установить fromValue так, как вы описываете.

Основной поток, однако, странный. Если код такой, как вы предлагаете, стрелка находится на экране {0,0}, и вы заставите ее исчезнуть и снова сдвинетесь. Это действительно анимация, к которой вы стремитесь, или есть еще анимации, которые вы оставили? Какой полный эффект вы пытаетесь достичь?

Обратите внимание, что у вас есть arrow в одном случае и symbolArrow в другом, что, как я полагаю, является опечаткой, но определенно было бы проблемой, если бы это были разные объекты.

0 голосов
/ 08 сентября 2011

заменить эту строку

     [symbolArrow setFrame:CGRectMake(0, 100, 18, 37)];

К

     [arrow setFrame:CGRectMake(0, 100, 18, 37)];

, а также

удалить эту строку

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