2012-02-19 29 views
9

Tôi đang sử dụng UIGestureRecognizer trong ứng dụng iOS của mình và tôi đang gặp một số vấn đề.UIGestureRecognizer cho một phần của UIView

Tôi chỉ muốn các cử chỉ hoạt động trong một khu vực nhất định của chế độ xem, vì vậy tôi đã tạo một UIView mới với một khung cụ thể và thêm nó vào chế độ xem gốc. Các cử chỉ đang làm việc tốt với điều này, nhưng vấn đề duy nhất bây giờ là tôi không thể nhấp vào những thứ nằm dưới/đằng sau khung nhìn mới đó (các đối tượng ở trên màn hình gốc). Nếu tôi đặt userInteractionEnabled thành NO, nó sẽ phá vỡ các cử chỉ để không phải là một tùy chọn.

Tôi có thể làm gì để khắc phục điều đó?

Cảm ơn.

Trả lời

31

Không tạo chế độ xem mới cho trình nhận dạng cử chỉ của bạn. Trình nhận dạng thực hiện phương thức locationInView:. Thiết lập cho chế độ xem có chứa vùng nhạy cảm. Trên handleGesture, nhấn thử vùng bạn quan tâm như thế này:

0) Thực hiện tất cả điều này trên màn hình có chứa vùng bạn quan tâm. Không thêm chế độ xem đặc biệt chỉ dành cho trình nhận dạng cử chỉ.

1) Cài đặt mySensitiveRect

@property (assign, nonatomic) CGRect mySensitiveRect; 
@synthesize mySensitiveRect=_mySensitiveRect; 
self.mySensitiveRect = CGRectMake(0.0, 240.0, 320.0, 240.0); 

2) Tạo gestureRecognizer của bạn:

gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[self.view addGestureRecognizer:gr]; 
// if not using ARC, you should [gr release]; 
// mySensitiveRect coords are in the coordinate system of self.view 


- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer { 
    CGPoint p = [gestureRecognizer locationInView:self.view]; 
    if (CGRectContainsPoint(mySensitiveRect, p)) { 
     NSLog(@"got a tap in the region i care about"); 
    } else { 
     NSLog(@"got a tap, but not where i need it"); 
    } 
} 

Các rect nhạy cảm nên được khởi tạo trong hệ toạ độ MyView của, quan điểm tương tự mà bạn đính kèm các nhận dạng.

+0

Xin lỗi nhưng, điều này sẽ làm gì? và đối với biến mySensitiveRect, tôi có sử dụng (0, 0, 320, 480) không? Bạn có một ví dụ đầy đủ? Cảm ơn: D –

+0

@DavidMurray: Hy vọng điều đó rõ ràng hơn – danh

+0

Cảm ơn bạn đã thực hiện điều đó. :-) –

Các vấn đề liên quan