Как получить сенсорный размер в iOS? - PullRequest
6 голосов
/ 14 января 2012

Я понимаю, что в этом ответе ясно говорится, что это невозможно без вызова частной функции.Поэтому, согласно условиям Apple, этот подход нельзя использовать в приложении App Store.

Однако некоторые приложения уже, кажется, используют этот вызов функции:

  • Предпоследняя для фактического отклонения ладони без предопределенной области отклонения, как в Note Taker HD
  • Virtuoso для чувствительности к давлению, которую они называют «TrueVelocity 2»
  • GarageBand, также для чувствительности к давлению

Очевидно, что этот подход уже широко используется в приложениях App Store, несмотря на ограничения Apple.

tl; dr Что такое вызов частной функции в iOS для получения размера касания?

Ответы [ 4 ]

18 голосов
/ 24 сентября 2014

В iOS8 вы можете получить доступ к свойству touch.majorRadius, которое равно CGFloat, увеличивается в 10,45 и пропорционально радиусу области касания в миллиметрах.touch.majorRadiusTolerance - это второе свойство, которое может использоваться с iOS8 и дает точность информации о радиусе касания.В моих измерениях он всегда составлял половину шага majorRadius.

На iPad Pro сенсорный экран в три раза более чувствителен и воспринимает слабый сигнал от карандаша Apple, который ниже порога отчетности для более старыхмодели iPad.Радиус касания карандаша равен 0,25, а даже малейший контакт с пальцем - 20,84 или более.

Используйте его следующим образом в методе UIView:

- (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);
}
5 голосов
/ 02 мая 2013

Если вы заинтересованы в приватном (то есть, не отправляйте это в метод магазина приложений, вы ищете -

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

В моем (частном!) Использовании это 10 было хорошим порогом для определения, когда человек использует свой палец / стилус или кладет руку на устройство.

Надеюсь, это кому-нибудь пригодится. Опять же, не используйте это в App Store.

5 голосов
/ 14 января 2012

Размер и давление два разных животных. Предпоследний, скорее всего, тест на большое количество касаний в определенной области (ладони имеют большую площадь, в конце концов, генерируют тонны касаний).

Сенсорный «размер» не существует. События касания IOS генерируются, когда палец касается экрана. Затем ОС берет центральную точку от прикосновения, и вот что вы получаете Это не CGRect, это CGPoint.

Давление «легче». см. здесь для обхода: Обнаружение силы давления крана с помощью акселерометра

И хотя я вижу, что вы ищите частные API, на github есть несколько дампов классов: http://github.com/kennytm/iphone-private-frameworks и https://github.com/nst/iOS-Runtime-Headers

1 голос
/ 17 сентября 2014

К вашему сведению, iOS 8 представила несколько свойств для оценки радиуса UITouch: majorRadius и majorRadiusTolerance.

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITouch_Class/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...