【问题标题】:Gradient layer not showing up/working on an existing View渐变层未显示/在现有视图上工作
【发布时间】:2011-03-17 14:31:39
【问题描述】:

我有一个视图,里面有另一个视图(称为 swipeView)。我正在尝试使用 CAGradientLayer 对其进行渐变色 - 代码如下

CAGradientLayer *layer = [CAGradientLayer layer];

layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor, 
                  [UIColor lightGrayColor].CGColor, nil];

layer.frame = swipeView.bounds;

[swipeView.layer insertSublayer:layer atIndex:0];

我在主视图控制器的 ViewDidLoad 方法中调用它。我看不到任何效果 - 我尝试着色的视图保持不变。我究竟做错了什么?还有其他设置/排序等我应该知道的吗?

【问题讨论】:

    标签: iphone cocoa-touch iphone-sdk-3.0 core-graphics


    【解决方案1】:

    我不知道这是否是您遇到的问题,但我只是有完全相同的症状,经过几个小时的困惑,我发现了我的问题:我正在创建一个按钮,添加渐变层,然后才定位按钮。最初,按钮尺寸都是 0,在设置 layer.frame = swipeView.bounds; 时,我也将渐变层设置为 0 尺寸。我添加了代码,以便在调整按钮大小时,我还调整了子层的大小以匹配,这解决了问题。我其实用的是MonoTouch,所以代码是这样的:

    btn.Frame = new RectangleF([the dimensions you need]);
    
    foreach(var s in btn.Layer.Sublayers)
    {
       s.Frame = btn.Bounds;
    }
    

    也许您正在代码中创建一个视图,而该视图尚未调整大小或定位,因此当您添加渐变时,它也没有大小,这就是您看不到它的原因。当视图改变大小时(可能在ViewDidLayoutSubviews 中),调整渐变层的大小,看看是否可以解决。

    【讨论】:

    • 许多年后,但还是想发表评论。这是我在使用自动布局的视图上的确切问题。现在我在didLayoutSubviews 中设置我的渐变。
    【解决方案2】:

    应该可以。你确定你正确连接了你的 swipeView 插座吗?调试您的 -viewDidLoad 并验证 swipeView 不为零。还要仔细检查边界(layer.frame)是否合理。

    这应该不是必需的,但您可以尝试输入 [layer setNeedsDisplay] 来强制图层再次渲染,但我认为这不是您的问题。

    【讨论】:

      【解决方案3】:
      CAGradientLayer *layer = [CAGradientLayer layer];
      
      layer.colors = [NSArray arrayWithObjects:(id)[UIColor darkGrayColor].CGColor, 
                    (id)[UIColor lightGrayColor].CGColor, nil];
      
      layer.frame = swipeView.bounds;
      
      [swipeView.layer insertSublayer:layer atIndex:0];
      

      确保 swipeView 不是 nil 并尝试 swipeView.frame。

      【讨论】:

        【解决方案4】:

        您不需要在颜色数组的末尾使用 nil 终止符。

        另外,我发现 insertSublayer 不起作用,索引为 0 或 1。更改为简单的 addSublayer 就可以了。

        【讨论】:

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