iOS10 + Gradient停止工作

时间:2016-10-20 10:27:04

标签: ios objective-c xcode8 uicolor cagradientlayer

刚刚转移到Xcode8和iOS10,为其中一个应用程序提供iOS10支持。

想出奇怪的问题,突然Gradient无法正常工作。

我发现应用Storyboard(Xcode8中的Storyboard更改)后,更改了视图不可见的渐变。

Xcode 7.3 - 渐变视图 -

enter image description here

Xcode 8 - 渐变视图 -

enter image description here

另外,如果我用旧故事板替换Storyboard,它会显示渐变,所以新的Storyboard出现了问题。

代码没有变化:

[view setOpaque:NO];
view.layer.cornerRadius = 45;
view.backgroundColor = [UIColor colorWithRed:23.0/255.0 green:29.0/255.0 blue:36.0/255.0 alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;

UIColor *color1 = [UIColor colorWithRed:33.0/255.0 green:39.0/255.0 blue:46.0/255.0 alpha:1.0];
UIColor *color2 = [UIColor colorWithRed:23.0/255.0 green:29.0/255.0 blue:36.0/255.0 alpha:1.0];
UIColor *color3 = [UIColor colorWithRed:14.0/255.0 green:20.0/255.0 blue:26.0/255.0 alpha:1.0];

NSArray *colorsArray = @[(id)color1.CGColor, (id)color2.CGColor, (id)color3.CGColor];

gradient.colors = colorsArray;
[gradient setLocations:@[@0.0, @0.35]];
[view.layer insertSublayer:gradient atIndex:0];

如果有人想出来,请告诉我。

修改

我没有创建新的Storyboard,我只是根据Xcode8的建议应用了以下更改

enter image description here

1 个答案:

答案 0 :(得分:1)

问题在于布局的时间发生了变化。因此,您的代码现在运行得太快了。你在说

gradient.frame = view.bounds

但此时此观点的界限为零。所以渐变有零帧!这就是为什么你看不到它。您正在viewDidLoad中执行布局代码。这总是错的,现在你明白了为什么。

将代码移至viewDidLayoutSubviews。那时,观点有其真正的界限。您必须使用条件,以便您的代码只运行一次。