【问题标题】:Animating CALayer in IKImageBrowserCell在 IKImageBrowserCell 中为 CALayer 设置动画
【发布时间】:2011-04-25 03:11:19
【问题描述】:

我有一个带有 IKImageBrowserCell 子类的自定义图像浏览器视图,我在其中添加了一个小标志图形,我想在某些情况下制作动画。

这有点像 Panic 的 Coda Sites 视图上的“i”符号(我猜这是自定义的 ImageBrowserView ......对吗?)。在 Coda 的站点视图中,如果您将鼠标悬停在一个项目上,小 i 会淡入并在您悬停时消失。

试图重现这种效果,但我很挣扎。

我对 IKImageBrowserCell 进行了子类化,并且在 layerForType.. 期间保存了对标志层的引用。

然后当鼠标经过我试图改变不透明度但它没有改变。

悬停检测代码本身有效,我从 NSLogs 知道,但 CALayer (signLayer.opacity = 1.0) 的隐式动画永远不会启动。

有什么建议吗?

也许我遗漏了一些东西(对核心动画来说有点新)。

谢谢

【问题讨论】:

  • 通过调试/日志记录,您看到在您更改不透明度时 signLayer 不是 nil 吗?请记住,如果您尝试设置 nil 实例的不透明度,它不会崩溃。
  • @Aviad。我检查的第一件事:)那里肯定有一个CALayer
  • 并且您确定该图层以其他方式显示(假设它被初始化为不透明度为1?)。可能是它 needsDisplay 或者它是如此隐形以至于无法捕捉到悬停(尽管你说你检查过)
  • @Aviad。也试过了。我从 0.5 的不透明度开始,以确保它在那里。 needsDisplay 似乎没有任何改变。

标签: objective-c cocoa core-animation calayer ikimagebrowserview


【解决方案1】:

试试这个:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.duration = 0.8s //the duration of the fade
animation.repeatCount = 0;
animation.autoreverses = NO;
animation.fromValue = [NSNumber numberWithFloat:1.0];
animation.toValue = [NSNumber numberWithFloat:0.0];
[myLayer addAnimation:animation forKey@"fadeOut"];

要淡入图层,请用 twoValue 切换 fromValue 并重命名键。

希望这会有所帮助。

【讨论】:

  • 我之前试过了,也没用。基本上没有核心动画启动。
  • 您是否将图层的委托设置为它的视图控制器?
  • 我在一个 IKImageBrowserCell 中,这不完全是一个视图控制器。为什么要设置委托?我不是自定义绘制图层。
  • 在您的情况下,您可以将委托设置为图层的父视图。即使您不是自定义绘制图层,有时也需要委托来响应绘图或动画方法。
  • 我试过了,但它所做的只是导致对 layerForType 的无限调用。我猜视图本身会失效或其他什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多