Thuộc tính allowableMovement
trong số UILongPressGestureRecognizer
dường như bị bỏ qua. Tôi đã tạo một dự án mới (Xcode 4.5.1, iOS 6) bằng cách sử dụng mẫu Ứng dụng xem đơn và thêm Trình nhận dạng cử chỉ báo chí dài vào chế độ xem. Có một ổ cắm có dây và một hành động. Dưới đây là các mã cho phương thức hành động:allowableMovement có vẻ bị bỏ qua
- (IBAction)longPress:(UILongPressGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStatePossible) NSLog(@"possible");
if (sender.state == UIGestureRecognizerStateBegan) NSLog(@"began");
if (sender.state == UIGestureRecognizerStateChanged) NSLog(@"changed");
if (sender.state == UIGestureRecognizerStateRecognized) NSLog(@"recognized");
if (sender.state == UIGestureRecognizerStateCancelled) NSLog(@"cancelled");
if (sender.state == UIGestureRecognizerStateFailed) NSLog(@"failed");
CGPoint locationInView = [sender locationInView:self.view];
NSLog(@"long press: allowableMovement= %f, x= %f, y= %f", sender.allowableMovement, locationInView.x, locationInView.y);
}
Nếu tôi nhấn đủ dài và buông tôi có được điều này trong nhật ký:
2012-10-30 20:24:41.449 Long Press[1078:907] began
2012-10-30 20:24:41.455 Long Press[1078:907] long press: allowableMovement= 10.000000, x= 210.500000, y= 99.500000
2012-10-30 20:24:42.880 Long Press[1078:907] recognized
2012-10-30 20:24:42.882 Long Press[1078:907] long press: allowableMovement= 10.000000, x= 208.500000, y= 96.000000
Đây là những gì tôi mong đợi.
Nhưng không có vấn đề gì tôi đặt allowableMovement
thành (dương, âm, lớn, nhỏ), khi trạng thái là UIGestureRecognizerStateBegan
, tôi có thể kéo ngón tay trên màn hình. Trạng thái thay đổi thành UIGestureRecognizerStateChanged
và có các cập nhật thường xuyên và vị tríInView tiếp tục theo dõi chính xác. Khi tôi cho đi, tôi nhận được trạng thái UIGestureRecognizerStateRecognized
và kết quả cuối cùng cho nhật ký.
Tham chiếu lớp cho biết trình nhận dạng sẽ thất bại nếu chuyển động vượt quá allowableMovement
. Tại sao thuộc tính allowableMovement
dường như bị bỏ qua?
@ Murray Sagal: Điều này cũng giải quyết được sự nhầm lẫn của tôi. Tự hỏi, nếu có một cách để phát hiện nếu người dùng kéo ngón tay của họ ra khỏi khung nhìn sau khi LongPressGesture bắt đầu. – Kashif
@TPos Tôi nghĩ bạn có thể sử dụng 'locationInView:' hoặc một trong các phương pháp như nó. Nhưng có vẻ như nó sẽ xứng đáng với câu hỏi của chính nó. –