2012-01-14 22 views
5

Tôi hiểu rằng this response nêu rõ rằng điều này là không thể nếu không có cuộc gọi chức năng riêng. Do đó, theo các điều khoản của Apple, phương pháp này không thể được sử dụng trên một ứng dụng App Store.Cách nhận kích thước cảm ứng trong iOS?

Tuy nhiên, một số ứng dụng đã dường như sử dụng chức năng này gọi:

  • Penultimate cho chối cọ thực tế mà không có một khu vực từ chối xác định trước như ở Note Taker HD
  • Virtuoso cho độ nhạy áp lực, mà họ gọi là "TrueVelocity 2"
  • GarageBand cũng cho độ nhạy áp lực

rõ ràng, phương pháp này đã được sử dụng rộng rãi trong các ứng dụng App Store Despi Các hạn chế của Apple.

tl; dr Cuộc gọi chức năng riêng tư trên iOS để nhận kích thước cảm ứng là gì?

+1

GarageBand sử dụng gia tốc kế cho tốc độ thử nghiệm cảm ứng - giả định của bạn từ phía đó là sai. – Till

Trả lời

5

Kích thước và áp suất là hai động vật khác nhau. Áp dụng nhiều khả năng thử nghiệm cho một số lượng lớn các chạm trong một khu vực nhất định (lòng bàn tay có một khu vực rộng lớn sau khi tất cả, tạo ra tấn chạm).

Chạm vào "kích thước" không tồn tại. Sự kiện cảm ứng IOS được tạo khi ngón tay chạm vào màn hình. Hệ điều hành sau đó lấy một điểm trung tâm từ các liên lạc và đó là những gì bạn nhận được. Nó không phải là một CGRect, nó là một CGPoint.

Áp lực là 'dễ dàng hơn'. xem ở đây để một workaround: Tap pressure strength detection using accelerometer

Và trong khi tôi thấy bạn đang ở trong thị trường cho các API riêng, github tổ chức một số lớp bãi: http://github.com/kennytm/iphone-private-frameworkshttps://github.com/nst/iOS-Runtime-Headers

+0

Quá tệ họ không có .m –

+0

Tôi biết đây là một câu hỏi cũ, nhưng có vẻ như thời gian đã thay đổi. Xem câu trả lời của Peter Kämpf. – SwiftsNamesake

5

Nếu bạn đang quan tâm đến tin (ví dụ: , không nộp này với phương pháp lưu trữ ứng dụng, bạn đang tìm kiếm -

@interface UITouch (Private) 
-(float)_pathMajorRadius; 
@end 

trong tôi sử dụng (! tư nhân) điều này, 10 là một ngưỡng tốt để xác định khi một người đã sử dụng ngón tay của họ/bút stylus hoặc đặt tay lên thiết bị.

Hy vọng điều này hữu ích đối với một người nào đó. Một lần nữa, không sử dụng tính năng này trong App Store.

12

Với iOS8, bạn có thể truy cập vào touch.majorRadius bất động sản, mà là một CGFloat, phát triển trong bội số của 10,45 và tỷ lệ với bán kính của vùng chạm trong Millimet. touch.majorRadiusTolerance là thuộc tính thứ hai có thể được sử dụng với iOS8 và cung cấp độ chính xác của thông tin bán kính cảm ứng. Trong các phép đo của tôi, nó luôn bằng một nửa kích thước bước majorRadius.

Trên iPad Pro màn hình cảm ứng nhạy hơn ba lần và nhận tín hiệu yếu từ bút chì Apple dưới ngưỡng báo cáo trên các mẫu iPad cũ hơn. Bán kính cảm ứng của Bút chì được báo cáo là 0,25, trong khi ngay cả ngón tay nhỏ nhất tiếp xúc sẽ báo cáo là 20,84 trở lên.

Sử dụng nó như thế này trong phương pháp UIView của bạn:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

// Regular multitouch handling. 
    [super touchesBegan:touches withEvent:event]; 

    CGPoint center = [touch locationInView:self]; 
    NSLog(@"Touch detected at %6.1f | %6.1f", center.x, center.y); 
    CGFloat radius = [touch majorRadius]; 
    NSLog(@"Radius = %5.1f; lower limit = %5.1f; upper limit = %5.1f", radius, radius-touch.majorRadiusTolerance, radius+touch.majorRadiusTolerance); 
} 
+0

Đây thực sự là câu trả lời được chấp nhận tại thời điểm này ... – SwiftsNamesake

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