【问题标题】:How to change Frame.size using CABasicAnimation如何使用 CABasicAnimation 更改 Frame.size
【发布时间】:2010-09-01 05:41:16
【问题描述】:

您好,我使用下面代码中使用的 CABasicAnimation 更改了帧大小

CABasicAnimation *newanim; 
newanim = [CABasicAnimation animationWithKeyPath:@"bounds.size"];

newanim.duration=3.0;
newanim.fromValue=[NSValue valueWithCGSize:CGSizeMake(0,0)];
newanim.toValue=[NSValue valueWithCGSize:CGSizeMake(self.backgroundImageView.bounds.size.width, self.foregroundImageView.bounds.size.height)];

newanim.fillMode=kCAFillModeForwards;
newanim.autoreverses = YES;
newanim.repeatCount = 1;
newanim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
[self.view.layer addAnimation:newanim forKey:@"changeSize"]; 

但动画从原点开始并移动两侧(就像动画从中心开始)。

我试过改变 newanim = [CABasicAnimation animationWithKeyPath:@"frame.size"];

它根本不起作用。

【问题讨论】:

    标签: cocoa-touch caanimation


    【解决方案1】:

    Apple 对此有一个答案:http://developer.apple.com/library/mac/#qa/qa1620/_index.html

    但我个人认为这不是最好的方法,CATransform3DMakeScale 似乎更好:

    CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
    transformAnimation.duration=3.0;
    transformAnimation.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeScale(scaleFactorX, scaleFactorY, scaleFactorZ)];
    transformAnimation.removedOnCompletion = FALSE;
    
    [layer addAnimation:transformAnimation forKey:@"transform"];
    

    【讨论】:

      【解决方案2】:

      要在 Swift 5 中缩放图层的框架,您可以使用:

      let animation = CABasicAnimation(keyPath: "transform.scale.y")
      animation.toValue = 0.1
      animation.duration = 1.5
      animation.timingFunction = CAMediaTimingFunction.init(name: .easeInEaseOut)
      layer.add(animation, forKey: "animation_scale_y")
      

      transfrom.scale.y 缩放层的高度,transfrom.scale.x 缩放层的宽度,transfrom.scale.z 缩放层的深度。

      要在一个动画中转换所有比例参数,您可以使用

      let animation = CABasicAnimation(keyPath: "transform.scale")
      animation.toValue = CATransform3DMakeScale(0.1, 0.1, 1)
      animation.duration = 1.5
      animation.timingFunction = CAMediaTimingFunction.init(name: .easeInEaseOut)
      layer.add(animation, forKey: "animation_scale")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多