¿Cómo hago que UIImageView sea más oscuro cuando está resaltado (tocado)?

Tengo un UIImageView que muestra una image. Cuando se toca y se sostiene, me gustaría oscurecerse mientras el usuario tenga su dedo sobre la image. Básicamente, quiero que actúe como un UIButton.

Actualmente lo hago con un UIGestureRecognizer:

- (void)viewDidLoad { [super viewDidLoad]; UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(pictureViewTapped)]; singleTap.numberOfTapsRequinetworking = 1; singleTap.numberOfTouchesRequinetworking = 1; [self.pictureImageView addGestureRecognizer:singleTap]; [self.pictureImageView setUserInteractionEnabled:YES]; } 

y en my pictureViewTapped , tengo esto (por ahora):

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

¿Cómo hago que el UIImageView sea más oscuro? Cualquier ayuda es apreciada.

La forma más fácil es usar capas en el marco QuartzCore:

agregar: QuartzCore.framework para proyectar en la configuration de su proyecto agregue al file .h: #import

cree un gesto para la pulsación larga en lugar de pulsar ese comportamiento como describió:

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

método llamado cuando gesto activo:

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

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

En mi caso, el background se mostrará cuando se establezca la opacidad de la capa de ImageView a 0.9.

Uso una solución que use una nueva capa.

 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