はじめまして、質問をご覧頂いてありがとうございます。
現在、iOS8・Xcode7.3、swift2という環境でStoryBoardを利用せずにiOSアプリの開発を行っています。
今回、あるUIViewの上にheaderViewというものをaddSubviewして利用しています。
そのheaderViewに対して、CAGradiationLayerでグラデーションをかけています。
今回は全体を角丸にしたいので、ベースとなるビューに対して、layer.cornerRadius = 10, clipsToBounds = true
のプロパティをセットしています。
問題になっているのが、ページ遷移を行った際に、このcornerRadiusがグラデーション部分に反映されるのが遅い、ということです。
追記:グラデーションを掛けなくてもこの現象が発生しました。
はじめに四角で表示され、fadeされる形で角丸になります。これを初めから角丸で表示したいです。
以下がサンプルコードです。
swift
1let gradationColors = [UIColor.myGradationStartColor().CGColor, UIColor.myGradationEndColor().CGColor] 2headerGradationLayer.colors = gradationColors 3headerView.layer.insertSublayer(headerGradationLayer, atIndex: 0)
headerGradationLayer.removeAllAnimations()
なども試みてみたのですが、フェードが消えるだけで、遅れてくるという問題は解消されませでした。
ぜひお力をお貸しください。
追記
ページ遷移はpushで行っております。
swift
1self.navigationController?.pushViewController(nextViewController, animated: true)
基本的には以下のスニペットの構成で、View自体はサブクラスで作成しております。
swift
1class ModalViewController: UIView { 2 3 override func loadView() { 4 let modalView = ModalView() 5 modalView.frame = self.view.frame 6 self.view = modalView 7 } 8} 9 10class ModalView: UIView { 11 let headerView = UIView() 12 let headerGradationLayer = CAGradientLayer() 13 14 init() { 15 super.init(frame: .zero) 16 17 self.backgroundColor = UIColor.whiteColor() 18 self.clipsToBounds = true 19 self.layer.cornerRadius = 10 20 21 setHeaderView() 22 } 23 24 private func setHeaderView() { 25 let gradationColors = [UIColor.myGradationStartColor().CGColor, UIColor.myGradationEndColor().CGColor] 26 headerGradationLayer.colors = gradationColors 27 headerView.layer.insertSublayer(headerGradationLayer, atIndex: 0) 28 self.addSubview(headerView) 29 } 30}
詳しく調べてみると、push遷移をする際に、遷移前のViewControllerのviewの角が一度丸じゃなくなるという現象のようです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。