簡體   English   中英

為什么圖像過渡會影響我的動畫?

[英]Why does an image transition affect my animation?

我在圖像視圖上運行不斷的動畫:

[UIView animateWithDuration:dur
                      delay:curAnim.delay
                    options:(params)
                 animations:^{
                     self.view.layer.opacity = curAnim.opacity;
                     self.view.center = curAnim.center;
                     CGAffineTransform tr = CGAffineTransformMakeRotation(curAnim.rotation);
                     tr = CGAffineTransformScale(tr, curAnim.scale, curAnim.scale);
                     self.view.transform = tr;

                 }
                 completion:^(BOOL finished){

                 }];

然后,當常量動畫正在運行時,我想轉換到另一個圖像:

-(void)transitionToImage:(UIImage*)image duration:(CGFloat)duration
{
    UIImageView* iv = (UIImageView*)self.view;

    iv.image = image;

    CATransition *transition = [CATransition animation];
    transition.duration = duration;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;

    [iv.layer addAnimation:transition forKey:@"transition"];
}

但是,當我轉換時,現在有2個視圖,一個移動而一個不移動,而不是在我的圖像視圖上發生轉換。

我嘗試了各種轉換方法,但都產生了同樣的問題。

我怎么能這樣做,以便我可以轉換並繼續當前正在運行的動畫?

將Core Animation用於兩種動畫

CABasicAnimation *posAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
posAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(250, 250)];
posAnimation.fromValue = [NSValue valueWithCGPoint:self.imageView.layer.position];
posAnimation.duration = 3;
posAnimation.fillMode = kCAFillModeForwards;
posAnimation.removedOnCompletion = NO;
[self.imageView.layer addAnimation:posAnimation forKey:nil];

CABasicAnimation *imgAnim = [CABasicAnimation animationWithKeyPath:@"contents"];
imgAnim.fromValue = (id)[UIImage imageNamed:@"icon1"].CGImage;
imgAnim.toValue = (id)[UIImage imageNamed:@"icon2"].CGImage;
imgAnim.duration = 3;
imgAnim.fillMode = kCAFillModeForwards;
imgAnim.removedOnCompletion = NO;
[self.imageView.layer addAnimation:imgAnim forKey:nil];

CoreAnimation(CATransition)並沒有真正改變屬性。 [UIView animateWithDuration:...]的確如此。 所以CATransition並不關心當前的位置。 它會在動畫開始的位置抓取您的圖像,並僅在始終位於相同位置的“presentationLayer”(不在圖層本身)上執行轉換。

更新:

CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
scaleAnim.fromValue = @1;
scaleAnim.toValue = @2;
scaleAnim.duration = 3;
scaleAnim.fillMode = kCAFillModeForwards;
scaleAnim.removedOnCompletion = NO;
[self.imageView.layer addAnimation:scaleAnim forKey:nil];


CABasicAnimation *rotAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotAnim.fromValue = @0;
rotAnim.toValue = @(M_PI);
rotAnim.duration = 3;
rotAnim.fillMode = kCAFillModeForwards;
rotAnim.removedOnCompletion = NO;
[self.imageView.layer addAnimation:rotAnim forKey:nil];

暫無
暫無

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

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