iOS Touch, Жесты, Анимация
Я изучаю iOS4.3 SDK и хотел реализовать определенный эффект анимации. Но понятия не имею, как это сделать. Это выглядит так: у меня квадратная рамка на экране, и после того, как пользователь положил палец на коробку и потащил палец, коробка должна следовать за ним. До этого легко. Я смог реализовать это так -
-(void)touchesEnded:(NSSet *)touches
withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
CGAffineTransform scaleTrans = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
CGAffineTransform rotateTrans = CGAffineTransformMakeRotation(angle * M_PI / 180);
boxView.transform = CGAffineTransformConcat(scaleTrans, rotateTrans);
angle = (angle == 180 ? 360 : 180);
scaleFactor = (scaleFactor == 2 ? 1 : 2);
boxView.center = location;
[UIView commitAnimations];
}
Но когда пользователь поднимает палец, я хочу, чтобы коробка продолжала движение (как будто с импульсом). Это как тот же эффект прокрутки резинкой, который реализует яблоко; даже когда вы оставляете прокрутку, экран прокручивается и медленно останавливается. Как мне это реализовать?
2 ответа
Почему бы вам не рассмотреть возможность использования UIPanGestureRecognizer
, Вы можете использовать translationInView:
переместить коробку, как перемещает палец. И когда этот жест state
является UIGestureRecognizerStateEnded
Вы могли бы использовать velocityInView:
чтобы получить желаемый последующий эффект.
if (recognizer.state == UIGestureRecognizerStateEnded) {
CGPoint velocityPoint = [recognizer velocityInView:yourView];
[UIView setAnimationDelegate:self];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[yourView setCenter:CGPointMake(yourView.center.x + (velocityPoint.x/4), yourView.center.y + (velocityPoint.y/4))];
[recognizer setTranslation:CGPointZero inView:yourView];
[UIView commitAnimations];
}
Надеюсь, это поможет кому-то:)