2013-05-12 26 views
5

Tôi có UIImageView hiển thị ảnh. Khi khai thác và giữ, tôi muốn nó tối khi người dùng có ngón tay của họ trên các lần xem hình ảnh. Về cơ bản, tôi muốn nó hoạt động như một UIButton.Làm cách nào để tạo một tối hơn UIImageView khi được đánh dấu (nhấn)?

Tôi hiện có nó làm điều này với một 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]; 
} 

và trong pictureViewTapped của tôi, tôi có điều này (bây giờ):

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

Làm thế nào để làm cho tối hơn UIImageView? Bất kỳ trợ giúp được đánh giá cao.

+1

Nếu bạn muốn cư xử như nút, tại sao bạn không sử dụng nút? – danypata

Trả lời

15

Cách dễ nhất là sử dụng các lớp trong khuôn khổ QuartzCore:

add: QuartzCore.framework dự án trong môi trường dự án của bạn add để .h file: #import

tạo cử chỉ dành cho báo chí dài thay vì tap như rằng những hành vi như bạn mô tả:

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

phương pháp gọi khi cử chỉ tích cực:

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

Điều đó có hiệu quả, cảm ơn! – swiftcode

+7

'[self.imageView.layer setBackgroundColor: [UIColor blackColor] .CGColor]; [self.imageView.layer setOpacity: 0.9]; ' Dự định nền sẽ hiển thị khi bạn đặt toàn bộ độ mờ của imageViews thành 0,9? Nền có nên không bị ảnh hưởng bởi sự thay đổi độ mờ đục không? Nhưng dù sao, điều này không hiệu quả với tôi. :( – Toydor

+0

@Toydor Tôi đồng ý, tôi khuyên người đọc trong tương lai nên thử sử dụng thuộc tính '.tintColor' để thay thế. –

0

Swift-Giải pháp:

@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

Trong trường hợp của tôi, nền sẽ hiển thị thông qua khi thiết lập Opacity của layer ImageView để 0.9.

Tôi sử dụng giải pháp sử dụng lớp mới.

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 
Các vấn đề liên quan