Всегда анимируйте UIView к месту нажатия пользователя - PullRequest
1 голос
/ 18 декабря 2010

У меня есть UIView, который я хочу анимировать в положение, где в данный момент находится палец пользователя.

Итак, когда начинается касание, оно должно анимироваться в месте нажатия.Когда касание перемещается, оно должно настроить свое назначение на новое местоположение.

Когда касание заканчивается, оно должно завершить анимацию до последнего местоположения касания.никто не удался.Я попытался создать новую анимацию с beginFromCurrentState в touchesMoved, но это тоже не сработало.

Ответы [ 2 ]

5 голосов
/ 23 декабря 2010

Кажется, ты немного усложняешь это.Если вы реализуете touchesMoved, вы хотите перетащить.Если вас больше интересует тап, то вам нужно реализовать touchesEnded.В любом случае, вам просто нужно увидеть местоположение и обновить центр вашего UIView на основе этого местоположения.Если вы перенесете изменение в центральное значение в блоке анимации UIView, оно будет анимировано в позицию при обновлении.

Если вы используете iOS 3.2 или более позднюю версию, вы можете использовать распознаватели жестов, что делает это довольно тривиальным:

// In viewDidLoad or some such
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
                         initWithTarget:self action:@selector(viewWasTapped:)];
[[self view] addGestureRecognizer:tapRecognizer];

Затем объявите ваш селектор действий:

- (void)viewWasTapped:(UITapGestureRecognizer*)recognizer
{
  CGPoint location = [recognizer locationInView:[self view]];
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:1.0f]; // take a second to animate
  [viewToMove setCenter:location];
  [UIView commitAnimations];
}

Это оживит вид из одного места в другое.Это называется неявной анимацией.Использование классов Core Animation, таких как CAKeyframeAnimation или CABasciAnimation, будет явной анимацией.

0 голосов
/ 18 декабря 2010

Для этого нужны дополнительные подробности .. Но вы уверены, что используете touchesBegan, touchesMoved и touchesEnded из соответствующего представления (т.е. не из представления, которое вы хотите переместить)? Также убедитесь, что userInteractionEnabled = YES. Попробуйте зарегистрировать прикосновения от touchesBegan, чтобы убедиться, что вы получаете прикосновения.

Или, возможно, вы захотите просто проверить пример кода Apple MoveMe по адресу https://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html, где они решили все эти проблемы для вас.

...