Xcode: 如何在 CATransaction 中做线性动画
Xcode: how to do linear animation in a CATransaction
我的事务开始时很慢,变得很快,然后变慢。
我全程需要线速度。
我找到了 UIViewAnimationOptionCurveLinear
但找不到 [CATransaction begin]
的示例
这是我的代码:
[ CATransaction begin ];
if( graph_animation_enable )
[CATransaction setAnimationDuration: graph_animation_seconds ];
else
[CATransaction setAnimationDuration: 0 ];
//[CATransaction setValue : ( id ) kCFBooleanTrue forKey : kCATransactionDisableActions];
graph_CALayer.frame = CGRectMake( left_x, top_y, width, height );
graph_CALayer.backgroundColor = bar_background_color.CGColor;
CAMediaTimingFunction *linearTiming =
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
[CATransaction setAnimationTimingFunction: linearTiming];
[CATransaction commit];
我尝试了答案,但仍然是非线性的。
动画开始,但随后变慢。
使用CATransaction
setAnimationTimingFunction
和kCAMediaTimingFunctionLinear
的计时值
代码如下所示:
CAMediaTimingFunction *linearTiming =
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
[CATransaction setAnimationTimingFunction: linearTiming]
对于Swift5,CATransaction
有一个方法叫做setAnimationTimingFunction(_:)
。 setAnimationTimingFunction(_:)
具有以下声明:
class func setAnimationTimingFunction(_ function: CAMediaTimingFunction?)
Sets the timing function used for all animations within this transaction group. [...] This is a convenience method that sets the CAMediaTimingFunction
for the value(forKey:)
value of the kCATransactionAnimationTimingFunction
key.
因此,您可以使用以下代码片段之一为您的 CATransaction
设置线性动画:
CATransaction.begin()
CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear))
/* ... */
CATransaction.commit()
CATransaction.begin()
CATransaction.setValue(CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear), forKey: kCATransactionAnimationTimingFunction)
/* ... */
CATransaction.commit()
我的事务开始时很慢,变得很快,然后变慢。 我全程需要线速度。
我找到了 UIViewAnimationOptionCurveLinear
但找不到 [CATransaction begin]
这是我的代码:
[ CATransaction begin ];
if( graph_animation_enable )
[CATransaction setAnimationDuration: graph_animation_seconds ];
else
[CATransaction setAnimationDuration: 0 ];
//[CATransaction setValue : ( id ) kCFBooleanTrue forKey : kCATransactionDisableActions];
graph_CALayer.frame = CGRectMake( left_x, top_y, width, height );
graph_CALayer.backgroundColor = bar_background_color.CGColor;
CAMediaTimingFunction *linearTiming =
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
[CATransaction setAnimationTimingFunction: linearTiming];
[CATransaction commit];
我尝试了答案,但仍然是非线性的。 动画开始,但随后变慢。
使用CATransaction
setAnimationTimingFunction
和kCAMediaTimingFunctionLinear
代码如下所示:
CAMediaTimingFunction *linearTiming =
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
[CATransaction setAnimationTimingFunction: linearTiming]
对于Swift5,CATransaction
有一个方法叫做setAnimationTimingFunction(_:)
。 setAnimationTimingFunction(_:)
具有以下声明:
class func setAnimationTimingFunction(_ function: CAMediaTimingFunction?)
Sets the timing function used for all animations within this transaction group. [...] This is a convenience method that sets the
CAMediaTimingFunction
for thevalue(forKey:)
value of thekCATransactionAnimationTimingFunction
key.
因此,您可以使用以下代码片段之一为您的 CATransaction
设置线性动画:
CATransaction.begin()
CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear))
/* ... */
CATransaction.commit()
CATransaction.begin()
CATransaction.setValue(CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear), forKey: kCATransactionAnimationTimingFunction)
/* ... */
CATransaction.commit()