2013-03-26 6 views
7

Mam pewne problemy z animowaniem subskrypcji alfa mojego paska nawigacyjnego. Oto początkowy stan paska:iOS - jak sprawić, by subviews paska nawigacji były przejrzyste?

enter image description here

tutaj jest, jak daleko udało mi się do tej pory:

enter image description here

Chodzi o to, że muszę zrobić to wszystko „gwiazda” , "nowe" i inne okrągłe przyciski są przezroczyste, gdy wyszukiwanie jest aktywne (muszę zmniejszyć ich liczbę alfa do zera). Staram się ich w przejrzysty następujących metod delegata:

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

We wszystkich z nich zrobić zupełnie ten sam kod:

//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 
    } 
} 

Jednak nie mogłem osiągnąć pożądany rezultat w ten sposób, mimo że uzyskuję prawidłowe wartości alpha przy tym NSLog, przyciski w ogóle nie znikają. Czy są jakieś sugestie co do tego, co mogę robić źle?

EDIT 1:

myślę, że powinienem dodać opis hierarchii widok w moim przypadku. Cóż, mam UISegmentedConrol, który przechowuje te okrągłe przyciski, a także dwa UIImageViews, tło dla segmentowanej kontroli i wskaźnik trójkąta. Wszystkie te widoki są dodawane do paska nawigacyjnego w postaci podstron. Widoczny jest również prostokątny widok, który przytrzymuje pasek wyszukiwania, a także jest później dodawany jako podgląd do paska nawigacji, więc jest to widok z góry w hierarchii. Ponadto animuję mój pasek wyszukiwania, po prostu animując ramkę jego superwizja (rozszerzając lub kondensując ją, gdy powyższe zdarzenia występują w delegacie). Mam nadzieję, że przekazałem wszystkie niezbędne informacje.

+0

chcesz tylko przycisk, a także pasek UISearch też ??? – iPatel

+0

Po prostu użyj niestandardowego UITextField, który nakłada się na całą scenę. –

+0

Chcę, aby przyciski były aktywne, gdy pasek wyszukiwania nie jest aktywny, i chcę, aby przyciski były niewidoczne, gdy pasek wyszukiwania jest aktywny. – morgan1189

Odpowiedz

1

Minęło trochę czasu, odkąd zrobiłem programowanie w ios. Możliwe, że nawet jeśli ustawiasz alfa, ale nie uruchamiasz odświeżenia. [UIView setNeedsDisplay] może pomóc odświeżyć rysunek w następnym cyklu rysowania.

Dla odniesienia: What is the most robust way to force a UIView to redraw?

+0

Przykro mi to mówić, ale to nie zadziałało. – morgan1189

+2

Widok nie musi być przerysowywany po ustawieniu alfa. – Sulthan

+0

ok dobrze wiedzieć. – ssinganamalla

1

1) Jest to problem, aktualizacja UI, napisać oświadczenie po każdej aktualizacji kodu UI.

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

to zaktualizuje twój GUI.

lub

2) używać wykonać przełącznik na głównym wątku i zaktualizować UI w sposobie wyboru.

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