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

swi*_*ode 5 uiviewcontroller uiimageview uigesturerecognizer ios

我有一个显示图片的UIImageView.当点击并保持时,只要用户将手指放在图像视图上,我就希望它变暗.基本上,我希望它像UIButton一样.

我目前使用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];
}
Run Code Online (Sandbox Code Playgroud)

在我pictureViewTapped,我有这个(现在):

- (void)pictureViewTapped {
    NSLog(@"Picture view was tapped!");
}
Run Code Online (Sandbox Code Playgroud)

如何使UIImageView变暗?任何帮助表示赞赏.

Sha*_*med 17

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

add:在项目设置中项目的QuartzCore.framework添加到.h文件:#import

为长按创建手势而不是按照您描述的行为进行点击:

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

手势激活时调用的方法:

-(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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `[self.imageView.layer setBackgroundColor:[UIColor blackColor] .CGColor]; [self.imageView.layer setOpacity:0.9];`当你将整个imageViews不透明度设置为0.9时,背景是否会显示出来?背景是否不受不透明度变化的影响?无论如何,这对我不起作用.:( (8认同)

Dai*_*ima 5

就我而言,当将 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
Run Code Online (Sandbox Code Playgroud)