2013-12-10 4 views
0

Я перемещаю UIImages по экрану, это карты. Когда они перемещаются по экрану, изображения являются родовыми картами. Когда они приземляются в правильных положениях, они должны оставаться в этом положении, но возвращаются к исходным точкам. Исходными точками playerCardOne, playerCardTwo и playerCardThree являются (60,28 , 90,28 , 120,28) соответственно.Как я могу сохранить UIImage в новом положении после анимации?

Вот код:

[playerCardOne setImage:[UIImage imageNamed: @"cardBack.png"] forState:UIControlStateNormal]; 
[playerCardTwo setImage:[UIImage imageNamed: @"cardBack.png"] forState:UIControlStateNormal]; 
[playerCardThree setImage:[UIImage imageNamed: @"cardBack.png"] forState:UIControlStateNormal]; 

затем анимация:

[UIView animateWithDuration:1.0f 
       animations:^(void){ 
        playerCardOne.center = CGPointMake(120.0f, 28.0f); 
        playerCardTwo.center = CGPointMake(90.0f, 28.0f); 
        playerCardThree.center = CGPointMake(60.0f, 28.0f); 
         } 
       completion:^(BOOL finished) { 
        if (finished) {                                                                                                                                                                                                                                                                                                                                                              
         [playerCardOne setImage:[UIImage imageNamed:playerCardOneTitle] forState:UIControlStateNormal]; 
         [playerCardTwo setImage:[UIImage imageNamed:playerCardTwoTitle] forState:UIControlStateNormal]; 
         [playerCardThree setImage:[UIImage imageNamed:playerCardThreeTitle] forState:UIControlStateNormal]; 
        } 
    }]; 

Когда анимация завершает переднюю карту изображения всплывал и вернуться в исходное положение (т.е. playerCardOne должен быть (120.0, 28.0) но возвращается обратно на (60.0, 28.0). Как я могу заблокировать их в своих новых положениях?

+0

Как только я установил изображение, они появятся в исходном положении. –

ответ

2

Если вы используете AutoLayout, вы должны анимировать ограничения вместо фреймов элементов.

Существует информация об этом на objc.io в разделе Анимация.

В основном вы изменяете ограничение, а затем ретрансляцию в течение периода времени.

[UIView animateWithDuration:1.0f animations:^{ 
    [myView layoutIfNeeded]; 
}]; 
1

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

+0

Это решение работало, однако я хотел бы использовать авто-макет для моего проекта, есть ли обходной путь? –

+0

@ RyanCaskey Мой ответ - правильный способ анимации с помощью AutoLayout. – Evan

+0

Да @ Еван дал правильный ответ –

Смежные вопросы