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 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置