2014-10-10 14 views
7

Ho un UIView personalizzato, il suo comportamento è simile al seguente: dopo averlo caricato da pennino e aggiunto alla mia gerarchia di visualizzazione, è in primo luogo quasi trasparente (alpha = 0.1), quando lo tocco, diventa opaco (alpha = 1.0), dopo un po 'di tempo, diventa automaticamente quasi trasparente (alpha = 0.1).iOS `UIView` smette di rispondere al riconoscimento dei gesti quando il suo alfa è 0?

Il codice nella visualizzazione personalizzata è così, esso funziona come descritto sopra:

- (void)awakeFromNib { 
    [self setup]; 
} 

- (void)setup { 
    self.alpha = 0.1f; 
    [self addGestureRecognizer:[[UITapGestureRecognizer alloc] 
           initWithTarget:self 
             action:@selector(tapped:)]]; 
} 

- (void)tapped:(UITapGestureRecognizer *)tapRecognizer { 
    if (self.alpha == 1.0) { 
    [self hideSelf]; 
    } else { 
    [UIView animateWithDuration:0.5 
     animations:^{ self.alpha = 1.0f; } 
     completion:^(BOOL finished) { 
      [self.timer invalidate]; 
      self.timer = nil; 
      self.timer = [NSTimer timerWithTimeInterval:3 
               target:self 
               selector:@selector(hideSelf) 
               userInfo:nil 
               repeats:NO]; 
      [[NSRunLoop currentRunLoop] addTimer:self.timer 
             forMode:NSDefaultRunLoopMode]; 
     }]; 
    } 
} 

- (void)hideSelf { 
    [UIView animateWithDuration:0.5 
     animations:^{ self.alpha = 0.1f; } 
     completion:^(BOOL finished) { 
      [self.timer invalidate]; 
      self.timer = nil; 
     }]; 
} 

Ma non voglio "quasi trasparente (alfa = 0.1)", voglio "trasparente (alfa = 0.0) ". Quindi ho semplicemente cambiato "0.1" in "0.0" nel mio codice. Ma quando tocco la vista, non chiama nemmeno il metodo tapped:. Perché è così? Come posso farlo funzionare?

+3

'-hitTest: withEvent:' il metodo non verrà eseguito per 'oggetti UIView' _" che sono nascosti, che hanno disabilitato le interazioni dell'utente o hanno un livello alfa inferiore a '0.01'." _ Origine: ** UIView Riferimento di classe **: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html – holex

+0

@holex Grazie per averlo sottolineato, utile a saperlo. – axl411

risposta

8

Funziona in questo modo, se si modifica a zero la vista alfa, si interrompe l'acquisizione di eventi di tocco.

Si potrebbe cambiare il colore di sfondo della vista in trasparenza, invece di cambiare l'alfa della vista, in questo modo la vista non sarà visibile e si otterranno gli eventi.

0

completamente trasparente significa nascosto a destra anziché renderlo a 0.0 rendere l'UIview hide e posizionare un pulsante con Uicolor clear color nello stesso punto e trasferire il controllo a tale.

Problemi correlati