代码之家  ›  专栏  ›  技术社区  ›  Kyle Decot

CALayer w/Animation as ui视图层

  •  0
  • Kyle Decot  · 技术社区  · 14 年前

    我有一个UIView&我希望该视图的层是一个连续循环的动画,但我在开始时遇到了一些问题。我的视图子类中有以下内容:

    + (Class)layerClass {
    
    return [CALayer class];
    
    }
    

    在我的viewController中,我有:

    CAGradientLayer *gradient = [CAGradientLayer layer];
    [gradient setColors:[NSArray arrayWithObjects:[UIColor redColor],[UIColor blueColor],nil]];
    [[[self view] layer] addSublayer:gradient];
    

    这使我的应用程序崩溃。我到底做错了什么?应用程序崩溃,无法访问。

    2 回复  |  直到 14 年前
        1
  •  0
  •   AechoLiu    8 年前

    忘记指定颜色的位置。默认情况下,位置为零。

    CAGradientLayer *gradient = [CAGradientLayer layer];
    [gradient setColors:[NSArray arrayWithObjects:
              [[UIColor redColor] CGColor],
              [[UIColor blueColor] CGColor],
              nil]];
    
    [gradient setLocations:
              [NSNumber numberWithFloat:0.0],  // for redColor
              [NSNumber numberWithFloat:1.0],  // for blueColor
              nil]];
    
    [[[self view] layer] addSublayer:gradient];
    
        2
  •  1
  •   Matt Long    12 年前

    实际上,你正在发生的崩溃与没有设置位置无关。这个问题与在setColors数组中传递错误类型有关。CGColorRef是预期的类型。您的代码应该如下所示:

    CAGradientLayer *gradient = [CAGradientLayer layer];
    [gradient setColors:[NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor],
                                            (id)[[UIColor blueColor] CGColor],nil]];
    [[[self view] layer] addSublayer:gradient];
    

    CAGradientLayer的locations参数是可选的。

    致以最诚挚的问候。