2011-10-14 17 views
9

Mam widok z UIButton, UITextField i UIImageView dla tła.Nie można dotknąć podczas animacji (animacja bloku)

w viewDidLoad Próbuję ożywić UIImageView z alfa = 0 na alfa = 1 przy użyciu bloku. to jest dość proste, oto kod:

[UIView animateWithDuration:1.5 animations:^(void){ 

    ((UIView*)[self.view viewWithTag:123]).alpha = 1; 
}completion:^(BOOL finished){ 
}]; 

który działa poprawnie. ale podczas tych 1,5 sekund animacji moje dotknięcie w bieżącym widoku wydaje się być wyłączone. Nie mogę kliknąć żadnego z przycisków ani pól tekstowych aż do zakończenia animacji.

Dzięki z góry

Odpowiedz

0

I kończący się tego nie robi. Nie możesz dotknąć widoku, który wciąż jest animowany. to mój wniosek. Byłbym szczęśliwy, słysząc jakąś myśl na ten temat.

29

Należy użyć opcji UIViewAnimationOptionAllowUserInteraction jak w poniższym przykładzie:

[UIView animateWithDuration:1.0 
         delay:0 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^{ myView.alpha = 0.5; } 
       completion:NULL]; 
+0

ja nic złego, że mój kod jak i twój. różnica ma tylko opóźnienie i opcje. próbowałem, nie działa ... – HelmiB

+2

>> Różnica ma tylko opóźnienie i opcje. - Upewnij się, że nie ustawiłeś alfa na zero. Użyj co najmniej 0.1 zamiast animacji 0.0 ':^{myView.alpha = 0.1; } ' –

0

Zastosowanie animateWithDuration:delay:options:animations:completion: sposób i ustawić UIViewAnimationOptionAllowUserInteraction jako opcja

+0

wypróbowany, nie działa tak dobrze. wygląda na to, że mój widok nie działa podczas animacji ... – HelmiB

+0

używasz rozpoznawania gestów? .. –

+0

Nie, po prostu normalny widok ... – HelmiB

0

Wygląda na to, że ogólnie animowanie przycisków sprawia, że ​​ich stuknięcia są dość skomplikowane. Rozwiązaniem, które wymyśliłem, było to, aby element animacji był UIView z wszystkimi stylami przycisków. Przed animacjami UIView dodam prawdziwy przycisk do widoku powyżej UIView z jasnym tłem do miejsca, w którym chcę interakcji użytkownika. Zdecydowanie dodaje dodatkowy krok, ale jest bardzo niezawodny.

//create button and view 
UIButton *viewNotificationBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height -70), 320, 50)]; 
UIView *viewNotificationView = [[UIView alloc] initWithFrame:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height), 320, 50)]; 

//add elements to screen 
[self.view addSubview:viewNotificationView]; 
[self.view insertSubview:viewNotificationBtn aboveSubview:viewNotificationView]; 


[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
    [viewNotificationView setFrame:CGRectMake(0, ([UIScreen mainScreen].bounds.size.height - 70), 320, 50)]; 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:0.5 delay:10.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
     viewNotificationView.alpha = 0; 
    } completion:^(BOOL finished) { 
     [viewNotificationView removeFromSuperview]; 
     [viewNotificationBtn removeFromSuperview]; 
    }]; 
}]; 
2

UIView userinteraction w animacji za pomocą .allowUserInteraction dla Swift 3 +, iOS 10

Dodaj do animacji nazywamy UIViewAnimationOptions flag .allowUserInteraction

UIView.animate(withDuration: 1.0, delay: 0.0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.0, options: [.curveEaseIn,.allowUserInteraction], animations: { 

      //your animation block 

      }, completion: { isAnimated in 
      //after animation is done 
    }) 
Powiązane problemy