gpt4 book ai didi

iphone - 更改图层/ View 属性时禁用动画?

转载 作者:技术小花猫 更新时间:2023-10-29 11:09:45 29 4
gpt4 key购买 nike

我通过向 UIView 添加多个层来组成一种动画。这些层应由脚本设置为可见或不可见。

脚本基于实现协议(protocol)的对象:

// the general protocol for a step
@protocol ActionStep
-(void) applyForTime:(int)playtime;
-(void) reset;
@end

我在计时器中遍历步骤对象:

NSEnumerator* enumerator = [ScriptObjects objectEnumerator];
id obj;

while ( obj = [enumerator nextObject] )
{
id <ActionStep> step = obj;
[step applyForTime:currentmilliseconds];
}

一个脚本对象是这个对象:

@interface LayerStep : NSObject <ActionStep> 
{
int mTimeOffset;
CGPoint mOffset;
float mAlpha;
LayerObject* mTheLayer;
bool mPrepared;
}
-(id)initWithLayerObject: (LayerObject*) theLayer Milliseconds:(int) milliseconds Offset:(CGPoint) offset Alpha:(float)alpha;

@end

最后我在层中实现协议(protocol):

-(void) applyForTime:(int)playtime
{
if ( mPrepared ) // has the step already been executed?
{
if ( playtime >= mTimeOffset )
{
[mTheLayer setAlpha:mAlpha]; // AssignedLayer.opacity = alpha;
[mTheLayer setPosition:mOffset]; // AssignedLayer.position = offset;
mPrepared = false;
}
}
}

在步骤中应用更改会导致转换。

有没有办法禁用此转换?我现在根本没有使用任何 CoreAnimation 调用,只使用属性本身(参见代码)。

最佳答案

更改图层的“可动画”属性之一会创建 Apple 文档所称的隐式动画。

引用关于该主题的 Xcode 文档:

Core Animation’s implicit animation model assumes that all changes to animatable layer properties should be gradual and asynchronous. Dynamically animated scenes can be achieved without ever explicitly animating layers. Changing the value of an animatable layer property causes the layer to implicitly animate the change from the old value to the new value. While an animation is in-flight, setting a new target value causes the animation transition to the new target value from its current state.

在幕后,系统会生成一个 CAAnimation 来进行更改。

如另一位发帖者所说,可以使用setAnimationDuration让动画瞬间发生,有关闭动画的效果。不过,我怀疑系统仍会生成动画。

关闭隐式层动画的官方方法是使用

[CATransaction begin];
[CATransaction setDisableActions: YES];
//layer changes
[CATransaction commit];

编辑:

在 Swift 3 中,这段代码看起来像这样:

CATransaction.begin()
CATransaction.setDisableActions(true)
//layer changes
CATransaction.commit()

关于iphone - 更改图层/ View 属性时禁用动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10155641/

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