突出显示(点击)时,如何使UIImageView变暗?

问题描述:

我有一个显示图片的UIImageView。点击并按住时,只要用户将手指放在图像视图上,就会使其变暗。基本上,我希望它像UIButton一样行事。突出显示(点击)时,如何使UIImageView变暗?

我现在已经将其与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]; 
} 

,并在我的pictureViewTapped,我(现在)有这样的:

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

如何使暗的UIImageView?任何帮助表示赞赏。

+1

如果您想表现得像一个按钮,为什么不使用按钮? – danypata 2013-05-12 18:49:13

最简单的方法是在QuartzCore框架使用层:

附加:QuartzCore.framework在您的项目设置项目 添加到.h文件中:#进口

为长按,而不是创造的姿态如你描述抽头作为行为:称为

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

方法当手势活性:

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

工作,谢谢! – swiftcode 2013-05-13 10:39:11

+7

'[self.imageView.layer setBackgroundColor:[UIColor blackColor] .CGColor]; [self.imageView.layer setOpacity:0.9];' 是意图使背景将显示通过当您将整个imageViews不透明度为0.9?背景是否应该不受不透明度变化的影响?总之,这不适合我。 :( – Toydor 2014-12-17 11:53:59

+0

@Toydor我同意,我建议未来的读者尝试使用'.tintColor'属性代替。 – 2018-02-16 00:44:22

斯威夫特 - 解决方案:

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

在我的情况下,设置的ImageView图层不透明度改为0.9时,背景将显示出来。

我使用使用新图层的解决方案。

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