iPad: переместите UIView с анимацией, затем переместите его назад - PullRequest
2 голосов
/ 24 мая 2010

У меня есть следующий код в подклассе UIView, который переместит его с экрана с анимацией:

float currentX = xposition; //variables that store where the UIView is located
float currentY = yposition;

float targetX = -5.0f - self.width;
float targetY = -5.0f - self.height;

moveX = targetX - currentX; //stored as an instance variable so I can hang on to it and move it back
moveY = targetY - currentY;

[UIView beginAnimations:@"UIBase Hide" context:nil];
[UIView setAnimationDuration:duration]; 
self.transform = CGAffineTransformMakeTranslation(moveX,moveY);
[UIView commitAnimations];

Работает просто отлично. Я изменил targetX / Y на 0, чтобы увидеть, действительно ли он перемещается в указанную точку, и это так.

Проблема в том, что когда я пытаюсь переместить вид обратно в исходное положение:

moveX = -moveX;
moveY = -moveY;

[UIView beginAnimations:@"UIBase Show" context:nil];
[UIView setAnimationDuration:duration];
self.transform = CGAffineTransformMakeTranslation(moveX,moveY);
[UIView commitAnimations];

Это делает UIView примерно в 3 раза длиннее. Таким образом, представление обычно откладывается с правой стороны экрана (в зависимости от того, где он находится).

Есть ли что-то с функцией CGAffineTransforMakeTranslation, которую я должен знать? Я прочитал документацию, и из того, что я могу сказать, он должен делать то, что я ожидаю.

У кого-нибудь есть предложения, как это исправить? Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 мая 2010

Преобразование UIView не аддитивно;Я предлагаю, чтобы переместить его обратно, вместо этого выполните:

self.transform = CGAffineTransformIdentity;

В документах сказано (об обновлении фрейма):

"Предупреждение: если это свойство не является преобразованием идентичности, значениесвойства frame не определено и поэтому должно игнорироваться. "

2 голосов
/ 24 мая 2010

Присвоение transform приведет к исчезновению старого. Чтобы вернуться к исходной позиции, назначьте ей преобразование идентичности.

self.transform = CGAffineTransformIdentity;

(или лучше, просто измените .frame вместо .transform.)

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