2013-03-26 115 views
7

我一直在使用我的導航欄的動畫確定子視圖的alpha值時遇到一些麻煩。這裏是酒吧的初始狀態:iOS - 如何使導航欄的子視圖透明?

​​

這裏多遠我纔拿到現在:

enter image description here

的事情是,我需要做這一切的「明星」 ,「新」和其他圓形按鈕透明時,搜索是積極的(我需要減少他們的α爲零)。我試圖讓他們在委託的下列方法透明:

- (void)searchBarCancelButtonClicked:(UISearchBar *)asearchBar 
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar 

在所有這些我做了很多相同的代碼:

//parent is just a pointer of a search delegate, which points to view controller 

for (UIView * someViewToFade in parent.navigationController.navigationBar.subviews) { 
    if (someViewToFade.tag == 88 || someViewToFade.tag == 11) { 
    NSLog("someViewToFade.alpha before changes = %f", someViewToFade.alpha); 
    someViewToFade.alpha = 0.0; //or 1.0, depending on the method 
    } 
} 

但是,我不能達到預期的效果這樣,儘管我在該NSLog中獲得了正確的alpha值,但按鈕並沒有完全消失。有什麼我可能做錯的建議嗎?

編輯1:

我想我應該在我的情況下添加視圖層次的一些描述。那麼,我有UISegmentedConrol,它擁有這些圓形按鈕,還有兩個UIImageViews,分段控制的背景和三角形指針。所有這些視圖都會作爲子視圖添加到導航欄中。此外還有一個矩形視圖,它包含搜索欄,並且稍後還將其作爲子視圖添加到導航欄中,因此它是層次結構中的頂層視圖。另外,我只是通過動畫製作其超級視圖的框架(擴展或縮小它,當以上事件發生在代表中時)來動畫化我的搜索欄。我希望我已經提供了所有必要的信息。

+0

你只想要按鈕還是UISearch Bar呢? – iPatel 2013-03-26 19:30:44

+0

只需使用覆蓋整個場景的自定義UITextField。 – 2013-03-26 19:36:29

+0

我希望按鈕在搜索欄未激活時處於活動狀態,並且當搜索欄處於活動狀態時,我希望按鈕不可見。 – morgan1189 2013-03-26 19:40:22

回答

1

自從我做了ios編程以來,它已經有一段時間了。即使您正在設置alpha,但不會觸發重繪,這也是可能的。 [UIView setNeedsDisplay]可能有助於在下一個繪圖週期中刷新繪圖。

對於一個參考:What is the most robust way to force a UIView to redraw?

+0

很抱歉這麼說,但沒有奏效。 – morgan1189 2013-03-26 19:45:19

+2

設置alpha後,視圖不必重新繪製。 – Sulthan 2013-03-26 19:55:12

+0

好吧,很高興知道。 – ssinganamalla 2013-03-26 22:48:50

1

1)這是UI更新的問題,寫後的任何UI更新代碼這一說法。

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]]; 

這將更新您的GUI。

2)使用上主線程執行選擇和更新選擇器方法的UI。

[self performSelectorOnMainThread:@selector(UpdateUIMethod) withObject:self waitUntilDone:NO];