Для простого отскока анимации, вы можете сделать это с помощью CAKeyFrameAnimation
:
CAMediaTimingFunction *linearTiming = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
CAMediaTimingFunction *easeOutTiming = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
CAKeyframeAnimation *fbTranslationYAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.translation.y"];
fbTranslationYAnimation.duration = 0.700;
fbTranslationYAnimation.values = @[@(0.000), @(-35.000), @(-55.000), @(-45.000), @(-35.000), @(-39.000), @(-43.000), @(-39.000), @(-35.000), @(-37.000), @(-35.000)];
fbTranslationYAnimation.keyTimes = @[@(0.000), @(0.143), @(0.286), @(0.429), @(0.571), @(0.643), @(0.714), @(0.786), @(0.857), @(0.929), @(1.000)];
fbTranslationYAnimation.timingFunctions = @[easeOutTiming, linearTiming, linearTiming, linearTiming, linearTiming, linearTiming, linearTiming, linearTiming, linearTiming, linearTiming];
fbTranslationYAnimation.beginTime = CACurrentMediaTime()+delay;
fbTranslationYAnimation.fillMode = kCAFillModeBoth;
fbTranslationYAnimation.removedOnCompletion = removedOnCompletion;
[[self.imgView layer] addAnimation:fbTranslationYAnimation forKey:@"BounceAnimation_TranslationY"];
Это дает эффект:
Для получения дополнительной информации о сроках CoreAnimation, пожалуйста, прочитайте this
Если вы хотите сделать это с помощью UIKitDynamics, вы можете избежать большого количества кода. Вы можете сделать это нравится:
- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize the animator.
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}
, а затем добавить гравитацию (падать), столкновение (реагировать, когда это касается другого вида), эластичности (подпрыгивать) к ImageView:
UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.imgView]];
[self.animator addBehavior:gravityBehavior];
UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.imgView]];
[collisionBehavior addBoundaryWithIdentifier:@"tabbar"
fromPoint:self.tabBarController.tabBar.frame.origin
toPoint:CGPointMake(self.tabBarController.tabBar.frame.origin.x + self.tabBarController.tabBar.frame.size.width, self.tabBarController.tabBar.frame.origin.y)];
[self.animator addBehavior:collisionBehavior];
UIDynamicItemBehavior *bounceBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[self.imgView]];
bounceBehavior.elasticity = 0.75;
[self.animator addBehavior:bounceBehavior];
Что происходит если он уже на фронте? Например. непрозрачность от 0 до 1 – zcui93
без проблем, даже если отскок, но не получение @ zcui93 –
использовать CAKeyFrameAnimation, чтобы получить больше контроля над анимацией. Вы можете использовать множество настраиваемых анимаций. –