2013-05-12 13 views
5

Ho un UIImageView che mostra un'immagine. Se toccato e tenuto premuto, mi piacerebbe che scurisse finché l'utente ha il dito sopra la visualizzazione di immagini. Fondamentalmente, voglio che funzioni come un UIButton.Come si rende una UIImageView più scura quando evidenziata (toccata)?

Io attualmente ho che fare questo con un UIGestureRecognizer:

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

e nel mio pictureViewTapped, ho questo (per ora):

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

Come faccio a fare il più scuro UIImageView? Qualsiasi aiuto è apprezzato.

+1

Se si desidera comportarsi come un pulsante, perché non si utilizza un pulsante? – danypata

risposta

15

Il modo più semplice è quello di utilizzare i livelli nel quadro QuartzCore:

aggiuntivo: QuartzCore.framework proiettare nelle impostazioni di progetto metti in .H File: #import

creare gesto per pressione prolungata, invece di rubinetto come che i comportamenti come hai descritto:

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

metodo chiamato quando gesto attiva:

-(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

Ha funzionato, grazie! – swiftcode

+7

'[self.imageView.layer setBackgroundColor: [UIColor blackColor] .CGColor]; [self.imageView.layer setOpacity: 0.9]; ' L'intenzione è che lo sfondo venga visualizzato quando si imposta l'opacità di imageViews su 0.9? Lo sfondo non dovrebbe essere influenzato dal cambio di opacità? Comunque, questo non funziona per me. :( – Toydor

+0

@Toydor Sono d'accordo, raccomando ai futuri lettori di provare a utilizzare la proprietà '.tintColor'. –

0

Swift-Solution:

@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

Nel mio caso, di sfondo sarà visibile attraverso quando impostare l'opacità del livello di ImageView a 0,9.

Io uso una soluzione che utilizza un nuovo livello.

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 
Problemi correlati