iOS Touch, Жесты, Анимация - PullRequest
1 голос
/ 03 июня 2011

Я изучаю 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 ]

5 голосов
/ 16 ноября 2011
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];

}

Надеюсь, это кому-нибудь поможет:)

2 голосов
/ 03 июня 2011

Почему бы вам не рассмотреть возможность использования UIPanGestureRecognizer. Вы можете использовать translationInView:, чтобы перемещать коробку так, как перемещает палец. И когда жест state равен UIGestureRecognizerStateEnded, вы можете использовать velocityInView:, чтобы получить желаемый последующий эффект.

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