2012-04-22 36 views
6

Tôi đang tạo một ứng dụng mà tôi có chế độ xem nền và có sáu UIImageView làm các bản xem trước. Tôi có một số UITapGestureRecognizer để xem khi nào một trong số UIImageView s được nhấn vào và phương thức handleTap bên dưới là những gì mà trình nhận dạng cử chỉ gọi. Tuy nhiên, khi tôi chạy điều này, hitTest:withEvent: luôn trả về chế độ xem nền ngay cả khi tôi nhấn vào một trong các imageView. Nó có liên quan gì đến sự kiện khi tôi gọi hitTest không?hitTest: withEvent: Not Working

Cảm ơn

- (void) handleTap: (UITapGestureRecognizer *) sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     CGPoint location = [sender locationInView: sender.view]; 
     UIView * viewHit = [sender.view hitTest:location withEvent:NULL]; 
     NSLog(@"%@", [viewHit class]); 
     if (viewHit == sender.view) {} 
     else if ([viewHit isKindOfClass:[UIImageView class]]) 
     { 
      [self imageViewTapped: viewHit]; 
      NSLog(@"ImageViewTapped!"); 
     } 
    } 
} 

Trả lời

12

UIImageXem, theo mặc định, được định cấu hình để không đăng ký tương tác người dùng.

Từ các tài liệu UIImageView:

mới đối tượng xem hình ảnh được cấu hình để bỏ qua sự kiện người dùng bằng cách mặc định. Nếu bạn muốn xử lý các sự kiện trong một lớp con tùy chỉnh của UIImageView, bạn phải thay đổi giá trị của thuộc tính userInteractionEnabled thành YES sau khi khởi tạo đối tượng.

Vì vậy, ngay sau khi bạn khởi tạo quan điểm của bạn, bạn nên có:

view.userInteractionEnabled = YES; 

này sẽ biến sự tương tác trở lại và bạn sẽ có thể đăng ký các sự kiện liên lạc.

+0

Cảm ơn bạn rất nhiều! –

1

Có một viết lại trên cách tiếp cận của bạn (đơn GR trên quan điểm chứa) mà làm việc, nhưng nó sẽ làm tổn thương não của chúng ta nhận được hệ thống phối hợp đúng, mà chắc chắn là vấn đề trong mã được đăng.

Câu trả lời hay hơn là đính kèm N trình nhận dạng cử chỉ cho mỗi UIImageViews. Tất cả chúng đều có cùng mục tiêu và sử dụng cùng phương thức handleTap:. HandleTap: có thể có được chế độ xem mà không cần tìm kiếm bất kỳ hình dạng nào như sau:

UIImageView *viewHit = (UIImageView *)sender.view; 
+0

Ah, dự án gần như đã hoàn thành và toàn bộ dự án sử dụng đoạn mã được đưa ra nhưng có thể sau này khi tôi làm việc, tôi sẽ thử. Dù sao cũng cảm ơn bạn. –