2012-01-14 10 views
5

私は、this responseがプライベート関数コールなしではこれが不可能であることを明確に述べていることを理解しています。したがって、Appleの言葉によれば、このアプローチはApp Storeアプリケーションでは使用できません。彼らは「TrueVelocity呼ん圧力感度のためのVirtuoso iOSでタッチサイズを取得するには?

  • ノートテイカーHDのように定義済みの拒否エリアせずに、実際のパームリジェクションのための

    • Penultimate

      はしかし、いくつかのアプリは既にこの関数呼び出しを使用しているように見えます2"

    • のGarageBandも

    明らかに、このアプローチは既に広くApp Storeで使用されている圧力感度のためDESPIをアプリAppleの制限。

    tl; drタッチサイズを取得するためのiOSのプライベート関数呼び出しとは何ですか?

  • +1

    のGarageBandは、テストタッチ速度のための加速度計を使用しています - そのために、あなたの仮定が間違っています。 – Till

    答えて

    5

    サイズと圧力は2種類の異なる動物です。何らかの領域(手のひらは広い領域を持っていて、タッチを大量に生成する)で大量のタッチをテストする可能性が最も高い。

    「サイズ」のタッチはありません。 IOSタッチイベントは、指が画面に接触すると生成されます。 OSはタッチから中心点を取り、それがあなたのものです。それはCGRectではなく、CGPointです。

    圧力は「より簡単」です。 Tap pressure strength detection using accelerometer

    そして、私はあなたがプライベートAPIのための市場にいる見ながら、githubのは、クラスの数がダンプホスト:この問題を回避するためにここを参照してくださいhttp://github.com/kennytm/iphone-private-frameworkshttps://github.com/nst/iOS-Runtime-Headers

    +0

    あまりにも悪い彼らは持っていません.m –

    +0

    これは古い質問ですが、時間が変わったように思えます。 PeterKämpfの答えを見てください。 – SwiftsNamesake

    5

    を使用すると、プライベート(すなわちに興味があるなら、アプリストアの方法にこれを提出していない、あなたが探している - これが私の(!プライベート)の使用では

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

    10は/人は自分の指を使用していた時に判断するための良いしきい値ましたスタイラスまたは手を装置に置く。

    これは誰かに役立つことを願っています。再び、はありませんこれをApp Storeで使用してください。

    12

    、あなたがCGFloatあるtouch.majorRadiusプロパティにアクセスすることができ、10.45の倍数で成長し、ミリメートルで触れた領域の半径に比例しています。 touch.majorRadiusToleranceは、iOS8で使用できる2番目のプロパティで、タッチ半径情報の精度を示します。私の測定では、それは常にステップサイズの半分であった(majorRadius)。

    iPad Proでは、タッチスクリーンは3倍の感度があり、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); 
    } 
    
    +0

    これは本当にこの時点で受け入れられた答えです... – SwiftsNamesake

    関連する問題