2012-10-24 56 views

Trả lời

29

ACB trích dẫn tham chiếu UIGestureRecognizer. Để làm cho nó một chút cụ thể hơn, giả sử bạn có một cái nhìn với một nhận dạng cử chỉ pan đính kèm, và bạn có những phương pháp trong điều khiển điểm của bạn:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesBegan"); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesMoved"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesEnded"); 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesCancelled"); 
} 

- (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender { 
    NSLog(@"panGesture"); 
} 

Và tất nhiên những cử chỉ recognizer chảo được cấu hình để gửi panGestureRecognizerDidUpdate: thông điệp.

Bây giờ giả sử bạn chạm vào chế độ xem, hãy di chuyển ngón tay của bạn đủ để cử chỉ di chuyển được nhận dạng và sau đó nhấc ngón tay lên. Ứng dụng in ra sao?

Nếu nhận dạng cử chỉ có cancelsTouchesInView thiết lập để YES, ứng dụng sẽ đăng những thông điệp:

touchesBegan 
touchesMoved 
touchesCancelled 
panGesture 
panGesture 
(etc.) 

Bạn có thể nhận được nhiều hơn một touchesMoved trước khi hủy. Vì vậy, nếu bạn đặt cancelsTouchesInView thành YES (mặc định), hệ thống sẽ hủy liên lạc trước khi gửi tin nhắn đầu tiên từ trình nhận dạng cử chỉ và bạn sẽ không nhận được bất kỳ tin nhắn liên quan đến cảm ứng nào nữa cho lần chạm đó.

Nếu nhận dạng cử chỉ có cancelsTouchesInView thiết lập để NO, ứng dụng sẽ đăng những thông điệp:

touchesBegan 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
(etc.) 
panGesture 
touchesEnded 

Vì vậy, nếu bạn đặt cancelsTouchesInView-NO, hệ thống sẽ tiếp tục gửi tin nhắn cảm ứng có liên quan cho cảm ứng cử chỉ, xen kẽ với thông báo của trình nhận dạng cử chỉ. Các liên lạc sẽ kết thúc bình thường thay vì bị hủy bỏ (trừ khi hệ thống hủy bỏ các liên lạc cho một số lý do khác, giống như nút home được nhấn trong khi liên lạc).

+0

Cảm ơn! Khi bạn đặt cancelsTouchesInView thành Không, sự kiện sẽ bị hủy popping phải không? – jebberwocky

+1

Tôi không hiểu ý nghĩa của “hủy popping”. –

3

Từ cổng nhà phát triển táo link:

cancelsTouchesInView - Nếu một trình nhận dạng cử chỉ nhận ra cử chỉ của nó, nó unbinds chạm còn lại của cử chỉ đó từ quan điểm của họ (vì vậy cửa sổ sẽ không phân phối chúng). Cửa sổ hủy bỏ các chạm trước đó với một thông báo (touchesCancelled: withEvent :). Nếu trình nhận dạng cử chỉ không nhận ra cử chỉ của nó, chế độ xem sẽ nhận được tất cả các lần chạm trong chuỗi đa chạm.

cancelsTouchesInView:

Một Boolean giá trị ảnh hưởng cho dù chạm được giao cho một cái nhìn khi một cử chỉ được công nhận.

@property (nonatomic) BOOL cancelsTouchesInView

Thảo luận

Khi thuộc tính đây là YES (mặc định) và người nhận nhận ra cử chỉ của nó, chạm của cử chỉ đó đang chờ không được gửi đến chế độ xem và các giao diện được phân phối trước đây sẽ bị hủy thông qua thông báo chạm vào Đã gửi: withEvent: được gửi tới chế độ xem. Nếu cử chỉ trình nhận dạng không nhận ra cử chỉ của nó hoặc nếu giá trị của thuộc tính này là KHÔNG, chế độ xem sẽ nhận được tất cả các lần chạm trong trình tự đa chạm .

+0

Whats là do "cảm ứng của cử chỉ đó đang ĐANG ĐANG ĐANG" ..? –

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