oOOMIAO 2013-07-05 07:27 采纳率: 10%
浏览 1178

iPhone-转换形状的动画

如何做转换形状的动画?从椭圆到矩形,从矩形到椭圆。

代码:

UIBezierPath *roundedRectBezierPath = [UIBezierPath bezierPathWithRoundedRect:newRect cornerRadius:10];
UIBezierPath *ovalBezierPath = [UIBezierPath bezierPathWithOvalInRect:newRect];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];
animation.duration = 3;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
if (isRect) {
    self.shapeLayer.path = roundedRectBezierPath.CGPath;
    animation.fromValue = (__bridge id)(ovalBezierPath.CGPath);
    animation.toValue = (__bridge id)(roundedRectBezierPath.CGPath);
} else {
    self.shapeLayer.path = ovalBezierPath.CGPath;
    animation.fromValue = (__bridge id)(roundedRectBezierPath.CGPath);
    animation.toValue = (__bridge id)(ovalBezierPath.CGPath);
}    
[self.shapeLayer addAnimation:animation forKey:@"animatePath"];

结果如下:

CSDN移动问答

怎么变成这样呢。我希望图片能收缩和膨胀,而不是这样重画。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-01 21:08
    关注

    这段代码的逻辑看起来是对的,但是会有一些细节问题。


    首先,你需要将 self.shapeLayer.path 设为你最终想要的路径,然后将 animation.fromValue 和 animation.toValue 设为当前的路径和最终的路径。这样,在动画执行期间,形状层就会从当前路径变换到最终的路径。


    其次,你还可以尝试调整动画的 timingFunction 属性,来获得更好的动画效果。你可以使用不同的时间函数(如 kCAMediaTimingFunctionEaseIn 或 kCAMediaTimingFunctionEaseOut),或者创建自定义的时间函数来调整动画的速度。


    最后,你可能需要调整动画的 duration,以获得更好的动画效果。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算