У меня есть следующий код в подклассе 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, которую я должен знать? Я прочитал документацию, и из того, что я могу сказать, он должен делать то, что я ожидаю.
У кого-нибудь есть предложения, как это исправить? Спасибо.