Как создать анимацию UIView bounce?



у меня есть следующий CATransition для UIView называется finalScoreView, что позволяет ему войти в экран сверху:



CATransition *animation = [CATransition animation];
animation.duration = 0.2;
animation.type = kCATransitionPush;
animation.subtype = kCATransitionFromBottom;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

[gameOver.layer addAnimation:animation forKey:@"changeTextTransition"];
[finalScoreView.layer addAnimation:animation forKey:@"changeTextTransition"];


Как сделать так, чтобы он отскакивал один раз после того, как он падает, а затем остается неподвижным? Он все равно должен войти в экран сверху, но затем отскакивать, когда он опускается.



любая помощь была бы очень признательна, спасибо!

865   4  

4 ответов:

С динамикой iOS7 и UIKit больше нет необходимости использовать CAKeyframeAnimations или UIView анимация!

посмотри приложение UIKit Dynamics Catalog от Apple. Поочередно,Teehanlax имеет четкий, краткий учебник С полный проект в github. Если вам нужен более подробный учебник о входах и выходах динамики, то Ray Winderlich tutorial это здорово. Как всегда, Apple docs-отличная первая остановка, поэтому проверьте ссылка на класс UIDynamicAnimator в документации.

вот немного кода из учебника Teenhanlax:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UIGravityBehavior* gravityBehavior = 
                [[UIGravityBehavior alloc] initWithItems:@[self.redSquare]];
[self.animator addBehavior:gravityBehavior];

UICollisionBehavior* collisionBehavior = 
                [[UICollisionBehavior alloc] initWithItems:@[self.redSquare]]; 
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
[self.animator addBehavior:collisionBehavior];

UIDynamicItemBehavior *elasticityBehavior = 
                [[UIDynamicItemBehavior alloc] initWithItems:@[self.redSquare]];
elasticityBehavior.elasticity = 0.7f;
[self.animator addBehavior:elasticityBehavior];

и вот результаты

Square bounce

UIKit Dynamics-это действительно мощное и простое в использовании дополнение к iOS7, и вы можете получить от него отличный пользовательский интерфейс.

другие примеры:

Button bounceSlide bounceSpringy collectionWWDC sprint collection

шаги для осуществления программирования с использованием UIKit динамика всегда одна и та же:

  1. создать UIDynamicAnimator и хранить его в сильном собственность
  2. создать один или несколько UIDynamicBehaviors. Каждое поведение должно иметь один или несколько элементов, как правило для анимации.
  3. убедитесь, что начальное состояние элементов, используемых в UIDynamicBehaviors является допустимым состоянием в пределах UIDynamicAnimator моделирование.

более простая альтернатива UIDynamicAnimator в iOS 7 есть Весенняя анимация (новая и мощная анимация блока UIView), которая может дать вам хороший эффект отскока с демпфированием и скоростью: С

[UIView animateWithDuration:duration
  delay:delay
  usingSpringWithDamping:damping
  initialSpringVelocity:velocity
  options:options animations:^{
    //Animations
    }
  completion:^(BOOL finished) {
    //Completion Block
}];

Свифт

UIView.animateWithDuration(duration,
     delay: delay,
     usingSpringWithDamping: damping,
     initialSpringVelocity: velocity,
     options: options,
     animations: {
            //Do all animations here
            }, completion: {
            //Code to run after animating
                (value: Bool) in
        })

Swift 4.0

UIView.animate(withDuration:duration,
     delay: delay,
     usingSpringWithDamping: damping,
     initialSpringVelocity: velocity,
     options: options,
     animations: {
            //Do all animations here
            }, completion: {
            //Code to run after animating
                (value: Bool) in
        })

usingSpringWithDamping 0.0 == очень оживленный. 1.0 делает его плавно замедляться без промаха.

initialSpringVelocity это, грубо говоря, " желаемое расстояние, деленное на нужные секунды". 1.0 соответствует общему расстоянию анимации, пройденному за одну секунду. Например, общее расстояние анимации составляет 200 точек, и вы хотите, чтобы начало анимации соответствовало скорости просмотра 100 пт/с, используйте значение 0,5.

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

вот демо-проект, который я создал, чтобы помочь вам получить анимацию в самый раз. Наслаждайтесь!

SpringDampingDemo

enter image description here

- (IBAction)searchViewAction:(UIButton*)sender
{
  if(sender.tag == 0)
  {
    sender.tag = 1;

    CGRect optionsFrame2 = self.defaultTopView.frame;
    optionsFrame2.origin.x = -320;

    CGRect optionsFrame = self.searhTopView.frame;
    optionsFrame.origin.x = 320;
    self.searhTopView.frame = optionsFrame;

    [UIView animateWithDuration:1.0 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:0 animations:^{

        CGRect optionsFrame = self.searhTopView.frame;

        optionsFrame.origin.x = 0;
        self.searhTopView.frame = optionsFrame;
        self.defaultTopView.frame = optionsFrame2;
    } completion:^(BOOL finished) {
    }];        
}
else
{
    sender.tag = 0;

    CGRect optionsFrame2 = self.defaultTopView.frame;
    optionsFrame2.origin.x = 0;

    CGRect optionsFrame = self.searhTopView.frame;
    optionsFrame.origin.x = 320;

    [UIView animateWithDuration:1.0 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:0 animations:^{

        CGRect optionsFrame = self.searhTopView.frame;

        optionsFrame.origin.x = 320;
        self.searhTopView.frame = optionsFrame;
        self.defaultTopView.frame = optionsFrame2;
    } completion:^(BOOL finished) {
    }];
}
}

Comments

    Ничего не найдено.