gpt4 book ai didi

ios - iOS 3.2 上的 CATransaction + UIView

转载 作者:行者123 更新时间:2023-11-29 04:33:53 36 4
gpt4 key购买 nike

我需要在 iOS 3.2 上实现非常自定义的动画所以,我既不能使用 block 动画,也不能使用 4.0 之前的 UIKit 动画。我尝试使用核心动画。

这是我的代码:

[CATransaction begin];
[CATransaction setAnimationDuration: 3.0];
[CATransaction setDisableActions: YES];
someView.frame = CGRectMake(endX, 0, endWidth, height);
// a lot of another property changes
[CATransaction commit];

不幸的是,它不起作用: View 立即更改大小/不透明度,没有任何动画。

这是我的尝试:

  • 我将新框架设置为不是 View 而是其图层 (someView.layer.frame = ...) - 情况更糟,因为 View 的 subview 未调整大小。
  • 我将禁用操作选项设置为"is"和“否”。

解决方案要求:

  • 必须支持 iOS 3.2(无阻止)。
  • 动画必须应用于不同的 View (因此,应用于不同的图层)。
  • 动画曲线已经够难了,所以我无法使用预定义的动画曲线(或者,通过 CA 语言,MediaTimingFunction)。

最佳答案

您发布的代码明确禁用动画。这行是罪魁祸首:

[CATransaction setDisableActions: YES];

通过进行该调用,事务中所做的所有更改都将立即提交,而无需动画。去掉那条线,更改就会生效。

如果您需要自定义曲线,您可能需要使用 CABasicAnimation,正如其他人建议的那样。事实上,CAAnimation 对象仅适用于单个图层,因此您必须创建多个 CAAnimation 对象。

或者,您应该能够使用 CATransaction 方法 setAnimationTimingFunction,并向其传递您创建的自定义计时函数。请参阅 CAMediaTimingFunction 类引用。具体看一下方法 functionWithControlPoints::::,它允许您通过指定描述计时函数的贝塞尔曲线的控制点来创建计时函数。您只能使用从 0,0 开始到 1,1 结束的单个三次贝塞尔曲线。虽然我见过一些可以实现更复杂效果的 hack,但没有直接支持更复杂的计时函数。

关于ios - iOS 3.2 上的 CATransaction + UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11310493/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com