2016-03-16 4 views
0

Анимация не знакома для меня, но теперь я люблю ее изучать. Так я googled и получить весну и CAanimation, гравитацию, подобный коллизии.Как добавить анимацию для UIImageview?

Что я судил:

-(void)longpress:(UILongPressGestureRecognizer *)longg 
{ 


    UIGestureRecognizerState state =[longg state]; 
    if(state ==UIGestureRecognizerStateBegan ||state ==UIGestureRecognizerStateChanged) 
    { 
     int temptag=[longg.view tag]; 
     UIImageView *views=(UIImageView *)arrimgstore[temptag]; 
       NSLog(@"got it to super view %@",views); 
     [UIImageView animateWithDuration:0.1 delay:1 usingSpringWithDamping:2 initialSpringVelocity:2 options:UIViewAnimationOptionLayoutSubviews animations:^{ 

      [_imgfull bringSubviewToFront:views]; 
     } completion:nil]; 
    } 
} 

в то время как действие bringsubviewtoFront происходит, я хотел бы добавить некоторые привлекательные анимации.

Выше кода некорректно, пожалуйста, помогите мне достичь этого :) спасибо.

+0

Что происходит если он уже на фронте? Например. непрозрачность от 0 до 1 – zcui93

+0

без проблем, даже если отскок, но не получение @ zcui93 –

+0

использовать CAKeyFrameAnimation, чтобы получить больше контроля над анимацией. Вы можете использовать множество настраиваемых анимаций. –

ответ

0

Для простого отскока анимации, вы можете сделать это с помощью 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"]; 

Это дает эффект:

enter image description here

Для получения дополнительной информации о сроках 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]; 
Смежные вопросы