2015-01-14 3 views
0

Я пытаюсь добавить анимацию в UIView. Цель анимации - «оживить» вид, появляющийся на экране (вместо того, чтобы просто появляться там).«Сбой» во время UIView Intro CAAnimation

Анимация - это масштабирование по размеру: начиная с 5%, до 120%, а затем очень быстро возвращается к 100% от обычной шкалы.

Моя проблема заключается в том, что полный масштаб UIView появляется очень быстро, до начала анимации.

Вот код:

UIView * myView = [[UIView alloc] initWithFrame:someFrame]; 
[self.view addSubview:myView]; 
[self initialAnimationFor:myView]; 

-(void) initialAnimationFor:(UIView*)pView { 

    const CFTimeInterval firstDuration = 0.75f; 
    const CFTimeInterval secondDuration = 0.025f; 
    const float initialValue = 0.05f; 
    const float middleValue = 1.20f; 

    CABasicAnimation * firstAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
    firstAnimation.duration = firstDuration; 
    firstAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    firstAnimation.fromValue = [NSNumber numberWithFloat:initialValue]; 
    firstAnimation.toValue = [NSNumber numberWithFloat:middleValue]; 

    CABasicAnimation * secondAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
    secondAnimation.duration = secondDuration; 
    secondAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    secondAnimation.fromValue = [NSNumber numberWithFloat:middleValue]; 
    secondAnimation.toValue = [NSNumber numberWithFloat:1.0f]; 

    CAAnimationGroup *animationGroup = [CAAnimationGroup new]; 
    animationGroup.duration = firstDuration + secondDuration; 
    animationGroup.animations = @[firstAnimation, secondAnimation]; 

    [pView.layer addAnimation:animationGroup forKey:nil]; 
} 

Любые идеи? Благодаря!

+0

попытаться использовать [анимация комплектDuration: 1.5]; [анимация комплектDelegate: self]; – ErasmoOliveira

ответ

1

Я бы другую технику и использовать прикован UIView блок анимации, как это:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    UIView *myView   = [[UIView alloc] initWithFrame:CGRectMake(40, 40, 200, 200)]; 
    myView.backgroundColor = [UIColor redColor]; 
    [self initialAnimationFor:myView]; 
} 
- (void)initialAnimationFor:(UIView*)pView { 
    pView.transform = CGAffineTransformMakeScale(0.05f, 0.05f); 
    if (pView.superview == nil) { 
     [self.view addSubview:pView]; 
    } 
    [UIView 
    animateWithDuration:0.75f 
    animations:^{ 
     pView.transform = CGAffineTransformMakeScale(1.20f, 1.20f); 
    } 
    completion:^(BOOL finished) { 
     [UIView 
      animateWithDuration:0.25f // <-- Your old value of 0.025f makes the animation VERY quick 
      animations:^{ 
       pView.transform = CGAffineTransformIdentity; 
      } 
      ]; 
    } 
    ]; 
} 

С помощью этой установки, вы получите «расти чуть-чуть больше, чем 100%, а затем„оседают“на 100% "эффект.

Является ли это приемлемым решением?

+0

Я закончил использовать это как метод внутри категории для нескольких UIView, которые имеют эту анимацию. Спасибо огромное! – dornad