2014-10-10 25 views
7

Özelleştirilmiş bir UIView var, davranışı şunun gibidir: ben onu nib'den yükledikten sonra görünüm hiyerarşisine ekledikten sonra, ilk olarak neredeyse saydam (alfa = 0.1), dokunduğumda, opak olur (alfa = 1.0), bir süre sonra, otomatik olarak neredeyse şeffaf hale gelir (alpha = 0.1).iOS `UIView`, alfa 0 olduğunda jest tanıyıcıya yanıt vermiyor mu?

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

Ama ("neredeyse şeffaf (alfa = 0.1)", ben "şeffaf istiyorum istemiyoruz:

özelleştirilmiş bir görünümde kod böyledir

, ben yukarıda açıklanan gibi çalışıyor alfa = 0.0) ". Bu yüzden kodumda "0.1" değerini "0.0" olarak değiştiriyorum. Ancak görünümde dokunduğumda, tapped: yöntemini bile çağırmaz. Bu neden böyle? Nasıl çalıştırabilirim?

+3

'-hitTest: withEvent:' yöntemi "engelli kullanıcı etkileşimlerini olduğu, gizli, ya da 0.01' 'den daha düşük bir alfa seviyesine sahip" _ UIView' nesneleri' için gerçekleştirilmez _ kaynak: ** UIView Sınıf Referans **: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html Buna dikkat çektiğin için – holex

+0

@holex sayesinde yararlı olduğunu bilmek. – axl411

cevap

8

Bu şekilde çalışır, alfa görünümünü sıfır olarak değiştirirseniz, dokunma olaylarını almayı durdurur.

Gerçi yerine görünümün alfa değişen, şeffaf görünümün arka plan rengini değiştirebilir, bu şekilde görünümünüzü görünmez ve siz olayları olsun.

0

tamamen şeffaf araçlar UIView saklambaç yapmak ve aynı noktada UIColor net renkli bir düğme yerleştirmek ve bu kontrolü aktarmak 0.0 bunu yapmak yerine doğru ziyade gizli.

İlgili konular