簡體   English   中英

UIView簡介CAAnimation期間的“故障”

[英]“Glitch” during UIView Intro CAAnimation

我正在嘗試將動畫添加到UIView。 動畫的目的是“動畫化”出現在屏幕上的View(而不是僅僅出現在屏幕上)。

動畫具有所有大小縮放比例:從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];
}

有任何想法嗎? 謝謝!

我將采用另一種技術,並使用鏈接的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%”的效果。

這是可行的解決方案嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM