2011-10-14 6 views
9

Ho una vista con UIButton, UITextField e uno UIImageView per Sfondo.Impossibile toccare durante l'animazione (Animazione a blocchi)

in viewDidLoad provo animare UIImageView da alpha = 0 a alpha = 1 utilizzando il blocco. è piuttosto semplice, ecco il codice:

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

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

che funziona bene. ma durante questi 1,5 secondi di animazione, il mio tocco nella vista corrente sembra essere disabilitato. Non riesco a fare clic su nessuno dei pulsanti o campi di testo fino alla fine dell'animazione.

Grazie in anticipo

risposta

0

ho finito per non fare questo. Non puoi toccare una vista che continua ad animare. questa è la mia conclusione. Sarei felice di sentire qualche pensiero su questo però.

29

Si dovrebbe utilizzare l'opzione UIViewAnimationOptionAllowUserInteraction come nel seguente esempio:

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

credo niente di sbagliato con il mio codice così come il tuo. la differenza solo ha ritardo e opzioni. provato però, non funziona ... – HelmiB

+2

>> la differenza solo ha ritardo e opzioni. - Si prega di essere sicuri, che non si imposta alpha a zero. Usa almeno 0.1 invece di animazioni 0.0 ':^{myView.alpha = 0.1; } ' –

0

Utilizzare il metodo e animateWithDuration:delay:options:animations:completion: impostare UIViewAnimationOptionAllowUserInteraction in opzione

+0

provato, non funziona pure. sembra che la mia vista non funzioni durante l'animazione ... – HelmiB

+0

stai usando i riconoscitori di gesti? .. –

+0

No, solo vista normale ... – HelmiB

0

Sembra che i pulsanti di animazione in generale rendano i loro stati di clic piuttosto schizzinosi. La soluzione che mi è venuta in mente è che l'elemento di animazione sia solo un UIView con tutti gli stili di pulsanti. Prima che l'UIView si animi aggiungo un pulsante reale alla vista sopra l'UIView con uno sfondo chiaro nella posizione in cui voglio che si verifichi l'interazione dell'utente. Aggiunge sicuramente un ulteriore passaggio ma è molto affidabile.

//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 in animazione utilizzando .allowUserInteraction per Swift 3 +, iOS 10

Aggiungi l'animazione chiamo i UIViewAnimationOptions bandiera .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 
    })