2016-10-20 6 views
0

Xcode8とiOS10に移行しました。アプリケーションのiOS10をサポートしました。iOS10 +グラデーション停止動作

奇妙な問題を突きつけて、突然グラデーションが働いていません。

ストーリーボード(Xcode8でのストーリーボードの変更)を適用した後、ビューに表示されない勾配の変更が見つかりました。

のXcode 7.3 - グラデーションビュー -

enter image description here

Xcodeの8 - グラデーションビュー - 私は古いストーリーボードにストーリーボードを交換した場合

enter image description here

はまた、それは勾配を示し、そうあり新しいストーリーボードで何か間違っています。

[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]; 

は、いずれかがそれを考え出した場合、私に教えてください:

何のコードの変更はありません。

編集:私は新しいストーリーボードを作成していなかった

問題はタイミングに変更があったということですXcode8

enter image description here

+0

"また、私がストーリーボードを古いストーリーボードに置き換えた場合、それはグラデーションを表示します。"そして、ストーリーボードにはいくつかの重要な違いがあります。それを比較して見つけてください。または、古いストーリーボードを使用します。 (なぜあなたは新しいものを作ったのですか?) – matt

+0

あなたのコードはOKです。デバッガで実行し、ビューが 'nil'でないことを確認し、実際にグラデーションを適用します。ストーリーボードの背景をマゼンタなどの異なるものに設定します。 – paiv

+0

@matt - アプリケーションがXcode 7.xで作成され、Xcode8にそれを開くと、古いStoryboardで変更が行われます.Xcode 7.xで開く方法はありますか?しかし、それは私がストーリーボードをそのように開くことを許さないでしょう、それは常に新しいものにそれを変えます。新しいストーリーボードは作成されていません – Kampai

答えて

1

により示唆されるように、私はちょうど変化の下に適用されますのレイアウト。したがって、あなたのコードはすぐに実行されています。あなたは言っている

gradient.frame = view.bounds 

しかし、この時点で、ビューはゼロの境界を持っています。だから勾配にはフレームがありません!それはあなたがそれを見ることができない理由です。あなたはviewDidLoadにレイアウトコードを書いています。これはいつも間違っていたので、今はなぜか分かります。

コードをviewDidLayoutSubviewsに移動します。その時、ビューには本当の限界があります。あなたのコードが一度だけ動くように条件を使わなければなりません。

+0

ああ、フレームについて忘れてしまった!!!!! ....それは今働いている。ありがとうございました:) – Kampai

+0

Xcode7.xで以前に動作していたのは、なぜviewDidLoad()であり、iOS7、iOS8、iOS9で動作していたのでしょうかと疑問に思っていました。 – Kampai

+0

私が言ったように、レイアウトのタイミングに変化がありました。あなたは前のタイミングについて幸運でしたが、あなたは真実である必要はないと仮定していました。 'viewDidLoad'はフレームが適用されたという信号ではありません。 'viewDidLayoutSubviews'はです。 – matt

関連する問題