ios – CAGradientLayer属性不能在UIView动画块内动画

ios – CAGradientLayer属性不能在UIView动画块内动画,第1张

概述我有一种感觉,我忽略了一些基本的东西,但是更好的方式找到它,而不是在互联网上出错? 我有一个相当基本的UI.我的UIViewController视图是一个子类,它的layerClass是CAGradientLayer.根据用户的 *** 作,我需要移动一些UI元素,并更改背景渐变的值.代码看起来像这样: [UIView animateWithDuration:0.3 animations:^{ sel 我有一种感觉,我忽略了一些基本的东西,但是更好的方式找到它,而不是在互联网上出错?

我有一个相当基本的UI.我的UIVIEwController视图是一个子类,它的layerClass是CAGradIEntLayer.根据用户的 *** 作,我需要移动一些UI元素,并更改背景渐变的值.代码看起来像这样:

[UIVIEw animateWithDuration:0.3 animations:^{  self.subvIEw1.frame = CGRectMake(...);  self.subvIEw2.frame = CGRectMake(...);  self.subvIEw2.Alpha = 0;  NSArray* newcolors = [NSArray arrayWithObjects:                         (ID)firstcolor.CGcolor,(ID)secondcolor.CGcolor,nil];  [(CAGradIEntLayer *)self.layer setcolors:newcolors];}];

问题是,我在这个块中对子视图的更改动画很好(东西移动和淡化),但是渐变颜色的改变并不是这样.它只是互换.

现在,the documentation does say核心动画代码在动画块内将不会继承该块的属性(持续时间,宽松等).但是,是不是完全没有定义一个动画交易? (文档的含义似乎是你会得到一个默认的动画,在那里我没有.)

我必须使用显式CAAnimation来使这项工作吗? (如果是,为什么?)

解决方法 这里似乎有两件事情.第一个(如Travis正确指出的,文档的状态)是UIKit动画似乎并不适用于应用于CALayer属性更改的隐式动画.我认为这是奇怪的(UIKit必须使用核心动画),但它是什么.

这是一个(可能非常愚蠢的)解决方法的问题:

NSTimeInterval duration = 2.0; // slow things down for ease of deBUGging  [UIVIEw animateWithDuration:duration animations:^{    [CATransaction begin];    [CATransaction setAnimationDuration:duration];    // ... do stuff to things here ...    [CATransaction commit];  }];

另一个关键是这个梯度层是我视图的层.这意味着我的观点是层的委托(其中,如果梯度层只是一个子层,则不会有代理).而UIVIEw实现的-actionForLayer:forKey:返回NSNull的“colors”事件. (可能是每个不在UIVIEw动画的特定列表上的事件)

将以下代码添加到我的视图将导致颜色更改如预期的动画:

- (ID<CAAction>)actionForLayer:(CALayer *)layer forKey:(Nsstring *)event{  ID<CAAction> action = [super actionForLayer:layer forKey:event];  if( [@"colors" isEqualToString:event]      && (nil == action || (ID)[NSNull null] == action) ) {    action = [CABasicAnimation animationWithKeyPath:event];  }  return action;}
总结

以上是内存溢出为你收集整理的ios – CAGradientLayer属性不能在UIView动画块内动画全部内容,希望文章能够帮你解决ios – CAGradientLayer属性不能在UIView动画块内动画所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1110202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存