2013-05-12 9 views
5

私は画像を表示する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

答えて

15

最も簡単な方法は、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; 
    } 
} 
+0

それはうまくいった、ありがとう! – swiftcode

+7

'[self.imageView.layer setBackgroundColor:[UIColor blackColor] .CGColor]; [self.imageView.layer setOpacity:0.9]; ' 全体のimageViews不透明度を0.9に設定したときに背景が表示されるという意図はありますか?背景が不透明度の変更の影響を受けないか?とにかく、これは私にとってはうまくいかない。 :( – Toydor

+0

@Toydor私は同意する、将来の読者は代わりに '.tintColor'プロパティを利用することをお勧めします。 –

0

スウィフト・ソリューション:私の場合は

@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

0.9にImageViewの者層の不透明度を設定すると、背景が透けて見えます。

新しいレイヤーを使用するソリューションを使用します。

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 
関連する問題