2014-10-10 9 views
7

Mam niestandardowe UIView, jego zachowanie jest takie: po załadowaniu go ze stalówki i dodaniu do mojej hierarchii widoków, Po pierwsze jest prawie przezroczyste (alpha = 0.1), po dotknięciu staje się nieprzezroczyste (alpha = 1.0), po pewnym czasie automatycznie staje się prawie przezroczysty (alpha = 0,1)."UIView" w systemie iOS przestaje reagować na rozpoznawanie gestów, gdy jego wartość alfa wynosi 0?

Kod w dostosowanego widzenia jest taki, że działa tak jak opisałem powyżej:

- (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; 
     }]; 
} 

Ale nie chcę „prawie przezroczysty (alfa = 0,1),” chcę „przezroczysty (alpha = 0.0) ". Więc po prostu zmieniłem "0.1" na "0.0" w moim kodzie. Ale kiedy stukam w widok, nie wywołuje on nawet metody tapped:. Dlaczego tak jest? Jak mogę to sprawić?

+3

'-hitTest: withEvent:' metoda nie zostanie wykonana dla obiektów 'UIView' _", które są ukryte, które spowodowały wyłączenie interakcji użytkownika lub mają poziom alfa mniejszy niż "0.01". _ Źródło: ** UIView Numer referencyjny **: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html – holex

+0

@holex Dziękujemy za wskazanie tego, pomocne, aby o tym wiedzieć. – axl411

Odpowiedz

8

Działa w ten sposób, jeśli zmienisz widok alfa na zero, przestanie otrzymywać zdarzenia dotykowe.

Można jednak zmienić kolor tła widoku na przezroczysty, zamiast zmieniać widok alfa, w ten sposób widok nie będzie widoczny i pojawią się zdarzenia.

0
2 w pełni przezroczysty oznacza, że ​​ukryty w prawo, a nie na 0.0, powoduje ukrycie interfejsu użytkownika i umieszczenie przycisku z wyraźnym kolorem Uicolor w tym samym punkcie i przeniesienie kontroli do tego.
Powiązane problemy