2016-09-20 87 views
1

我的問題不是關於如何設置梯度爲UIButton,但在哪裏設置它。這是我如何設置它:UIButton漸變效果問題viewDidLoad

let btnGradient = CAGradientLayer() 
btnGradient.frame = button_start_course.bounds 
btnGradient.colors = [(UIColor(red: 174.0/255.0, green: 127.0/255.0, blue: 183.0/255.0, alpha: 1.0).CGColor as CGColorRef), (UIColor(red: 78.0/255.0, green: 57.0/255.0, blue: 96.0/255.0, alpha: 1.0).CGColor as CGColorRef)] 
button_start_course.layer.insertSublayer(btnGradient, atIndex: 0) 

當我稱這種現象viewDidLoadbutton_start_course會產生不正確的邊界。爲了解決這個問題,我在viewDidAppear中調用了這段代碼。它工作正常,除了最初爲設置的顏色button_start_course on storyboard先出現,然後它變爲漸變顏色。
如何解決這個問題?

+0

在Autolayout中,在viewDidAppear(基於屏幕大小)中可以使用正確的視圖框架。所以一種方法是,最初隱藏按鈕。在viewDidAppear中設置顏色並取消隱藏按鈕。 – miOS

回答

1

梯度添加代碼viewDidLayoutSubviews。要調用一次,當視圖完成佈局子視圖時,聲明一個設置爲true的布爾值。

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    if !viewDidLayoutSubviews { 
     viewDidLayoutSubviews = true 
     // Code here 
    } 
} 
+0

謝謝。 Rijo有點快:) – Nitish

+0

@Nitish Rijo的答案在某種程度上是正確的。但由於viewDidLayoutSubviews可以被多次調用,你的按鈕將會有一堆漸變圖層。 :) – Xchord

+0

你是對的。謝謝 – Nitish

0

設置漸變的viewWillAppear內,而不是viewDidAppear

+0

行爲與viewDidLoad中的行爲相同 – Nitish

+0

在Autolayout中,正確的視圖框架將在viewDidAppear中可用(基於屏幕大小)。 – miOS

+0

@Nitish您是否檢查了此鏈接[鏈接](http://stackoverflow.com/questions/31172151/ios8-auto-layout-and-gradient)..不確定它可能會幫助你 – Aravi

1

您可以設置內部-(void)viewDidLayoutSubviews

+0

似乎是正確的。我正在尋找在故事板中設置漸變。但這似乎很好。 – Nitish