2013-05-12 20 views
5

Fotoğrafı gösteren bir UIImageView var. Dokunduğunda ve tutulduğunda, kullanıcının parmağını görüntü görüntüsünün üzerinde olduğu sürece kararmasını istiyorum. Temel olarak, UIButton gibi davranmasını istiyorum.Vurgulandığında (dokunulduğunda) UIImageView daha koyu nasıl çizilir?

Şu anda bir UIGestureRecognizer ile bunu adres:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] 
             initWithTarget:self 
             action:@selector(pictureViewTapped)]; 
    singleTap.numberOfTapsRequired = 1; 
    singleTap.numberOfTouchesRequired = 1; 
    [self.pictureImageView addGestureRecognizer:singleTap]; 
    [self.pictureImageView setUserInteractionEnabled:YES]; 
} 

ve benim pictureViewTapped yılında, ben (şimdilik) bu var:

- (void)pictureViewTapped { 
    NSLog(@"Picture view was tapped!"); 
} 

nasıl UIImageView koyu yapmak mı? Herhangi bir yardım takdir edilir.

+1

Düğmeye benzer davranmak isterseniz, neden bir düğme kullanmıyorsunuz? – danypata

cevap

15

kolay yolu QuartzCore çerçevesinde katmanları kullanmaktır:

eklenti: yerine uzun basın için jest oluşturmak

#import: eklenti proje ayarlarında proje QuartzCore.framework dosyasını .h Eğer açıklandığı gibi bu kadar musluk davranışlar:

self.longTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(darkenImage)]; 
    [self.imageView setUserInteractionEnabled:YES]; 
    [self.imageView addGestureRecognizer:self.longTap]; 

yöntemi denir aktif jest:

-(void)darkenImage { 
    switch (self.longTap.state) { 
     case UIGestureRecognizerStateBegan: // object pressed 
     case UIGestureRecognizerStateChanged: 
      [self.imageView.layer setBackgroundColor:[UIColor blackColor].CGColor]; 
      [self.imageView.layer setOpacity:0.9]; 
      break; 
     case UIGestureRecognizerStateEnded: // object released 
      [self.imageView.layer setOpacity:1.0]; 
      break; 
     default: // unknown tap 
      NSLog(@"%i", self.longTap.state); 
      break; 
    } 
} 
+0

Bu işe yaradı, teşekkürler! – swiftcode

+7

'[self.imageView.layer setBackgroundColor: [UIColor blackColor] .CGColor]; [self.imageView.layer setOpacity: 0.9]; ' Tüm imageViews opaklığını 0,9 olarak ayarladığınızda arka planın gösterilme amacı nedir? Arka plan opaklık değişmesinden etkilenmez mi? Her neyse, bu benim için işe yaramıyor. :( – Toydor

+0

@Toydor Katılıyorum, gelecekteki okuyucuların yerine '.tintColor' özelliğini kullanmayı deneyin. –

0

Swift-Çözüm: 0.9 ImageView'ın katman donukluk ayarladığınızda Benim durumumda

@IBOutlet weak var imageViewExport: UIImageView! 
var tapGestureExport = UILongPressGestureRecognizer() 

override func viewDidLoad() { 
     super.viewDidLoad() 

     imageViewExport.userInteractionEnabled = true 

     tapGestureExport = UILongPressGestureRecognizer(target: self, action: "tapGestureExportAction:") 
     imageViewExport.addGestureRecognizer(tapGestureExport) 
    } 

    func tapGestureExportAction(sender: UITapGestureRecognizer) { 

     switch(tapGestureExport.state) { 
     case UIGestureRecognizerState.Began, 
       UIGestureRecognizerState.Changed: 
      imageViewExport.backgroundColor = UIColor.blackColor() 
      imageViewExport.layer.opacity = 0.9 

     case UIGestureRecognizerState.Ended:  // released 
      imageViewExport.layer.opacity = 1.0 

      default: break // unknown tap 
      } 
} 
0

, arka plan aracılığıyla gösterecektir.

Yeni katman kullanan bir çözüm kullanıyorum.

let coverLayer = CALayer() 
coverLayer.frame = imageView.bounds; 
coverLayer.backgroundColor = UIColor.blackColor().CGColor 
coverLayer.opacity = 0.0 
imageView.layer.addSublayer(coverLayer) 

// when tapped 
coverLayer.opacity = 0.1