ios - 当我将子图层添加到图层时,为什么会丢失隐式动画?
<p><p>在 UIView 子类中,我有这个方法:</p>
<pre><code>-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * aTouch = ;
CGPoint loc = ;
CALayer * layer = ;
CGColor]];
;
;
;
;
;
CABasicAnimation * opacityAnim = ;
opacityAnim.duration=2.42;
opacityAnim.fromValue=;
opacityAnim.toValue=;
opacityAnim.fillMode = kCAFillModeForwards;
opacityAnim.timingFunction= ;
opacityAnim.removedOnCompletion=NO;
opacityAnim.delegate=self;
//explicit animation is working as expected
//;
// Why isn't the implicit animation working ?
;
}
</code></pre>
<p>我错过了什么?我希望 CALayer <code>layer</code> 的不透明度使用此方法的最后一行进行隐式动画处理。</p>
<h1>我的解决方案</h1>
<p>感谢邓肯的回答,这是我解决问题的方法。</p>
<pre><code>-(CALayer *) layerFactory:(CGPoint) loc {
CALayer * layer = ;
CGColor]];
;
;
;
;
return layer;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * aTouch = ;
CGPoint loc = ;
;
CALayer * layer = ;
;
;
;
;
;
;
}
</code></pre>
<p>您只需要将图层的创建和不透明度的修改放在两个不同的 CATransactionblock 中。但是,将层的创建(而不是添加)移动到 layerFactory 方法并不会改变这种情况。</p>
<p>我不知道这是否是最好的解决方案,但它确实有效。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您不能创建一个图层并设置它的不透明度,然后以相同的方法将不透明度设置为一个新值并获得隐式动画。尝试将您的创建/配置层代码放在 CATransaction 开始/结束 block 中,然后将不透明度设置为 1 的代码放在另一个事务开始/结束 block 中。</p>
<p>我认为这会奏效,但必须尝试一下才能确定。</p>
<p>如果这不起作用,请调用代码以使用 performSelector:withObject:afterDelay 和延迟值 0 将不透明度设置为 1。这将使系统添加不透明度为 0 的图层,然后处理更改不透明度为 1 作为单独的事务。</p></p>
<p style="font-size: 20px;">关于ios - 当我将子图层添加到图层时,为什么会丢失隐式动画?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/15509172/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/15509172/
</a>
</p>
页:
[1]