6

写真を表示する 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];
}

そして私の中にpictureViewTapped、私はこれを持っています(今のところ):

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

UIImageView を暗くするにはどうすればよいですか? どんな助けでも大歓迎です。

4

3 に答える 3

17

最も簡単な方法は、QuartzCore フレームワークでレイヤーを使用することです。

追加: QuartzCore.framework をプロジェクト設定でプロジェクトに .h ファイルに追加: #import

あなたが説明したように、タップの代わりに長押しのジェスチャーを作成します。

 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;
    }
}
于 2013-05-12T23:20:53.143 に答える
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
于 2016-01-26T17:11:41.223 に答える