4

UIApplicationをサブクラス化して、タッチディスプレイビューでタッチをインターセプトして表示しています。TouchDisplayビューを他のすべてのビューの上に維持するために、Application、Window、Delegate、またはMainViewControllerを拡張したいと思います。私や他のほとんどのアプリケーションが機能するにつれて、ビューとコントローラーは常に追加および削除されます。正解はこれらの追加と削除に対処し、タッチディスプレイビューを上部に維持できると思います。

助けてくれてありがとう、ジョー

4

2 に答える 2

6

これを実現するためのいくつかのアプローチを次に示します。

  1. iOS 5 以降と iPad のみをターゲットにしている場合は、2 つのビュー コントローラーを含む最上位のビュー コントローラーを作成できます。1 つ目は、「TouchDisplay」ビューのビュー コントローラーです。2 つ目は、アプリケーションの通常のルート ビュー コントローラーです。(つまり、既存のメイン ビュー コントローラー。このビュー コントローラーでdefinePresentationContextを YES に設定する必要があります) コンテナー ビュー コントローラーを作成しているので、これら 2 つのサブビューを好きなように並べ替えることができます。ビュー コントローラの封じ込めに関する WWDC 2011 トークがありますそれはこれについて非常に詳細になります。これは、TouchDisplayビューのビューコントローラーを提供し、回転を処理し、一般的に他の人とうまく機能するため、最も「正しい」アプローチです。(これは iPad でのみ機能します。iPhone では、新しいモーダル ビューが常に全画面をカバーするためです。)

  2. より簡単な方法は、TouchView を既存の最上位 UIWindow にサブビューとして追加することaddSubview:です。ほとんどのアプリケーションは、実際には最上位のビュー コントローラーを削除したり、新しい最上位のビュー コントローラーを追加したりしません。そこから他のView Controllerを提示するだけです。最上位ウィンドウに追加したビューは、それらの上にとどまります。もちろん、アプリがこのルールに従っていない場合もあります。その場合は、代わりにオプション 3 を試すことができます。これには回転の問題があります (デバイスが回転してもビューは自動回転しないため、自分で行う必要があります)。問題がある場合は、たとえば 1 秒のタイマーでビューを強制的に上に戻すこともできます。それをカバーする他のもので。UIViewController を取得せず、UIView のみを取得するため、これもオプション #1 ほど適切ではありません。

  3. 最も極端なアプローチは、別の UIWindow を作成しUIWindowLevelAlert、それに TouchDisplay ビューを配置するなど、より高いウィンドウ レベルを与えることです。その後、ウィンドウの背景を透明にすると、通常のアプリ コンテンツの上に表示されます。ここには、特に自動回転と、どのウィンドウが keyWindow であるかについて、多くの落とし穴があります (そのため、可能であれば代わりに #1 または #2 を使用する必要があります)。

于 2013-01-10T02:03:55.200 に答える
3

しばらくして、アプリを動作させることができました。既存のアプリケーションに対するタッチフィードバックを表示する使いやすいオーバーレイを作成しました。

ここからプロジェクトをダウンロードできます: https ://github.com/megaplow/FingerTracks/tree/master/FingerTracks

サンプル画像

ハッピーコーディング、ジョー

于 2013-02-08T00:04:30.917 に答える