【问题标题】:replace CALayer替换 CALayer
【发布时间】:2011-05-14 16:12:23
【问题描述】:

我正在关注this answer 以使用CALayer 创建渐变。这 关键命令是

[view.layer insertSublayer:gradient atIndex:0];

我的问题是我想定期更新渐变。如果我重复调用上面的代码,那么什么都不会发生,因为新的渐变被放在旧的渐变下面。看 this answer.

我的问题是:如何用另一个子层替换子层。我应该打电话给 replaceSublayer:with:。但要做到这一点,我需要参考旧的渐变。有没有动态的方法来获得这个。像[view.layer getSublayerAtIndex: 0] 这样的东西?在视图控制器中存储对当前渐变的引用是最简单的方法吗?

想法?

【问题讨论】:

    标签: iphone objective-c user-interface calayer gradient


    【解决方案1】:
        [[view layer] replaceSublayer:[[[view layer] sublayers] objectAtIndex:0] with:gradient];
    

    【讨论】:

    • 谢谢。这正是我想要的。
    【解决方案2】:

    如果你想得到一个子层,你应该使用这个方法:

    [view.layer.sublayers objectAtIndex:0];
    

    然后可以通过

    替换子层
    [view.layer replaceSublayer:[view.layer.sublayers objectAtIndex:0] with:yourNewGradient];
    

    【讨论】:

    • 没问题! :) PS:子视图使用相同的方法(但您使用 subviews 数组代替。
    【解决方案3】:

    除了替换图层,你可以只更新现有CAGradientLayer的colorslocations等属性来改变显示渐变的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多