Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 隐式动画淡入不起作用_Ios_Core Animation - Fatal编程技术网

Ios 隐式动画淡入不起作用

Ios 隐式动画淡入不起作用,ios,core-animation,Ios,Core Animation,我有一个UIView子类,它试图在它的一个子视图的顶部创建一个圆角矩形覆盖 当我使用下面的代码时,肯定会在我想要的地方出现一个绿色的圆角矩形,但无论我做什么,我都无法让它淡入 CALayer *parentLayer = [self layer]; // Create a new layer and configure it to be a rounded rect box overlay CALayer *layer = [CALayer layer]; layer.position = [

我有一个UIView子类,它试图在它的一个子视图的顶部创建一个圆角矩形覆盖

当我使用下面的代码时,肯定会在我想要的地方出现一个绿色的圆角矩形,但无论我做什么,我都无法让它淡入

CALayer *parentLayer = [self layer];

// Create a new layer and configure it to be a rounded rect box overlay
CALayer *layer = [CALayer layer];
layer.position = [slider layer].position;
layer.bounds = CGRectMake(0.0, 0.0, kWTFSliderWidth, kWTFSliderHeight);
layer.backgroundColor = [UIColor clearColor].CGColor;
layer.cornerRadius = 5.0;
layer.borderColor = [UIColor greenColor].CGColor;
layer.borderWidth = 3.0;

// Add the layer with a fade in to the parent layer
[parentLayer addSublayer:layer];

是否必须手动将
cabasicanition
添加到父层对象?
parentLayer
action
字典中不应该已经存在默认实例吗?

用以下内容替换您的
addSublayer:
调用:

layer.hidden = YES;
[parentLayer addSublayer:layer];
[CATransaction flush];
layer.hidden = NO;

作为记录,是的,我已经尝试创建并提交了一个包含
addSublayer:
的CATTransaction层作用域。当然,我很高兴这是可行的,但为什么一定要这样呢?按此顺序排列的
开始
添加子层
提交
消息难道不足够吗?此外,文档(毫不奇怪)对
flush有以下说明:
“但是,您应该尝试避免显式调用flush。”大概是出于性能原因。问题是显式事务嵌套在框架的隐式事务中。
flush
消息提交隐式事务。我认为在提交最外层的事务之前,新层的状态保持未提交状态,并且当您提交与以前提交的值不同的属性值时,框架仅创建隐式事务。我想我看到了flush的一些苹果示例代码。WWDC关于核心动画的视频中可能也提到了这一点。我强烈推荐WWDC视频。再次感谢Rob的澄清。还有一个问题:如果我将图层的“隐藏”属性设置为“是”以使其淡出,那么从图层树中删除它的正确方法是什么?我试着做隐藏=是;后跟[layer removeFromSuperlayer];,但代码似乎只是立即删除了该层。(这实际上是我在SO线程中要求您回答的一个更简单的问题的起源。)请随意在不同的答案条目中回答。开始一个
CATransaction
。将事务的完成块设置为将
removeFromSuperlayer
发送到该层。然后将层设置为隐藏,然后提交事务。