2014-10-10 3 views
7

사용자 정의 UIView을 가지고 있는데 그 동작은 다음과 같습니다. 펜촉에서로드하고 내 뷰 계층 구조에 추가 한 후 맨 먼저 거의 투명 (알파 = 0.1)이고 탭하면 불투명 (alpha = 1.0), 약간의 시간이 지나면 자동으로 거의 투명 해집니다 (알파 = 0.1).iOS UIView가 알파가 0 일 때 제스처 인식기에 응답하지 않습니다?

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

하지만 ("거의 투명은 (알파 = 0.1)", 나는 "투명 싶어하지 않으 :

사용자 정의보기의 코드는 다음과 같다

, 내가 위에서 설명한 것처럼 작동 알파 = 0.0). 그래서 간단하게 "0.1"을 "0.0"으로 변경합니다. 그러나 뷰를 탭하면 tapped: 메서드를 호출하지 않습니다. 이게 왜 그렇게? 어떻게 작동시킬 수 있습니까?

+3

숨겨져 있거나, 사용자 상호 작용을 사용하지 못하게하거나, 알파 레벨이 '0.01' 미만인'UIView' 개체 _에 대해'-hitTest : withEvent :'메서드가 수행되지 않습니다. "_ source : ** UIView 클래스 참조 ** : https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html – holex

+0

@ 홀렉스 그 점을 지적 해 주셔서 감사합니다. – axl411

답변

8

알파보기를 0으로 변경하면 터치 이벤트가 중지됩니다.

보기의 알파를 변경하는 대신보기의 배경색을 투명하게 변경해도보기를 볼 수없고 이벤트를 얻을 수 있습니다.

0

완전 투명이란 UIview를 숨기고 0.0을 만들지 않고 숨겨진 것을 의미하고 같은 지점에 Uicolor 투명 색이있는 버튼을 배치하고 그에 대한 제어를 전달합니다.

관련 문제