2012-09-06 12 views
8

w mojej aplikacji Mam animacje. na przykład mam przycisk w moim menu głównym i po kliknięciu rozpoczyna się animacja (jak przeniesienie jakiegoś miejsca itp.), a na końcu animacji przechodzi na inną stronę. Potrzebuję wyłączenia interakcji użytkownika podczas animacji. ponieważ podczas animacji Jeśli naciśniesz punkt początkowy mojego przycisku, strona, która ma być nawigowana, zostanie otwarta dwukrotnie. Podsumowując, jeśli nie pozwolę na jakąkolwiek interakcję użytkownika podczas animacji, mój problem zostanie rozwiązany. Jak mogę to zrobić?Rozwój iphone: wyłączanie interakcji użytkownika podczas animacji

+0

Jak animować widoku? Tradycyjna metoda lub użycie bloków? –

+0

@ NSPostWhenIdle..dlaczego jest źle lub stackOverflow nie pozwala na to? – Rajneesh071

+0

ok sir ... następnym razem będę się tym przejmował, ... :) – Rajneesh071

Odpowiedz

19

Przed animacji:

self.view.userInteractionEnabled = NO; 

i animacji w bloku realizacji:

self.view.userInteractionEnabled = YES; 
+0

jeśli użytkownik ma dwa przyciski w widoku, a następnie ...? – Rajneesh071

+1

wyłączenie widoku spowoduje wyłączenie wszystkich subviews – swebal

+0

Tak, masz rację ... ale chcę powiedzieć, że jeśli użytkownik ma dwa przyciski i chce jednocześnie animację na obu przyciskach ... to jak to możliwe zgodnie z kodem. .. więc sugeruję, aby wyłączyć przycisk jest lepszym podejściem .... – Rajneesh071

6

Po prostu można ustawić setUserInteractionEnabled na NO przed rozpoczęciem animacji, a w module zakończenia animacji ustawić ponownie na YES.

[myObject setUserInteractionEnabled:NO]; 
[UIView animateWithDuration:1.0 animations:^{ 
    [myObject setTransform:CGAffineTransformMakeTranslation(100, 100)];//some animation 
}completion:^(BOOL done){ 
    if (done){ 
     [myObject setUserInteractionEnabled:YES]; 
    } 
}]; 
2
yourView.userInteractionEnabled = NO; 
[UIView animateWithDuration:1 animations:^ 
{ 
    //animations here      
} 
completion:^(BOOL finished) 
{ 
    yourView.userInteractionEnabled = YES; 
}]; 
1

Wyłącz userIntrection Buttona.

Btn.userInteractionEnabled = NO; 
5

Nie musisz włamać się wokół z blokiem realizacji - nie ma opcji, animacja, która robi właśnie to dokładnie:

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     // animations here 
    } 
    completion:nil]; 

Gdybyś ustawić UIViewAnimationOptionAllowUserInteraction, to interakcja użytkownika byłby dozwolony.

+1

Pytanie brzmiało, w jaki sposób wyłączyć interakcję użytkownika dla wszystkiego podczas animacji. Te opcje animacji umożliwiają interakcję użytkownika z animowanym widokiem. – AWrightIV

15

To może pomóc:

// for ignoring event 
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

kod będzie wyglądać następująco:

[UIView animateWithDuration:1.0 animations:^{ 
     //some animation 
     [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    } 
    completion:^(BOOL done){ 
     if (done){ 
      [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
     } 
    } 
]; 
+1

Dokładnie to, czego potrzebowałem, dzięki! – iceydee

2

Aby wyłączyć dotykowy zdarzenie w widoku,

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

Aby włączyć dotykowy zdarzenie w widoku

[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
0

Posiadałem kontroler widoku z ikonami otwierającymi strony. Jeśli użytkownik szybko dotykał ikony1 i ikony2, 2 strony zostały otwarte.

aby zapobiec, że miałem to 2 linie na początku imprezy kranu ten sposób upewnić się, że cokolwiek się stało, endIgnoring wezwie

-(void) on_image_tap:(UITapGestureRecognizer *) tapGesture 
{ 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    [[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:0.5f]; 
Powiązane problemy