2012-04-27 19 views
0

私は実際にはMSPaint(線などを描画するものなど)のように動作するアプリケーションに取り組んでいます。 私は基本的にユーザーが描画する白いUIViewを持っています。このUIViewの上に、UIImageを設定しました。これは、グレーで0,4アルファです。私はこのUIImageを吸取紙として使いたいと思っています。アイデアは、ユーザーがこの領域に手のひらを置いたときにタッチを無効にすることです。そのため、描画するのがより快適です(マルチタッチは無効になっています。この「吸取紙」を使用すると、 )UIImageでタッチ検出を無効にする方法は?

UIImageを前面に表示しても、このUIImageでのユーザーのやりとりを無効にしても、UIViewで描画することはできます。画像が透明で、UIViewの「背後」がUIImageによってオーバーレイされていてもまだアクティブであるため、何が起こっているのか分かりません。 !

助けてください/指示/アイデアをいただければ幸いです!ありがとうございます:-)

答えて

1

わかりましたので、私がしたいことをすることができました!わーい! - ユーザーがストロークを描くビュー

  • StrokesViewController(のUIViewController)-theビューコントローラ

  • StrokesView(UIViewの):

    は私が3つの異なるクラスを得ました。

  • ブロッティングペーパー(UIView) - 吸取紙。

私はXIBファイルを3つすべてにリンクしています。

「BlottingPaper」と呼ばれるこの新しいクラスを作成し、UIViewをタイプしました。 .hと.mファイルは実際には空です(私はimport #import < Foundation/Foundation.h>) BlottingPaperでユーザー対話が有効になっています。 私はこのクラスで独占的なタッチを使用しません。

XIBファイルでは、StrokesViewの上にビューを配置するだけです。私はBlottingPaperにリンクする(私が望むようにアルファを変更する、blablabla ...)

それだけです!私が手のひらの上に手のひらを置くと、私の手がある場所には何も描画されませんが、私はまだStrokesViewの残りの部分に指で描くことができます!

4

UIImageの "userInteractionEnabled"プロパティを "NO"に設定しましたか?

+0

はい、私はそう思っています... UIImageはbuvardと呼ばれています。 (つまり、フランス語で用紙を吸うことを意味します)、UIViewはstrokesViewと呼ばれます。ここに私がしたことがあります: '[buvard bringSubviewToFront:strokesView]; buvard.userInteractionEnabled = NO; ' – tvincent

+1

UIImageにはuserInteractionEnabledプロパティがありません。あなたはUIImageViewを考えていますか? – bbarnhart

+0

はい@bbarnhart、そうです、buvardはUIImageViewであり、UIImageではありません...ごめんなさい。 – tvincent

2

UIImageViewではなく、UIImageViewでのユーザー操作を無効にする必要があります。これは機能するはずです。

編集:

それとも、卑劣なことが、ちょうどその上に空のビューを追加することができます。同じフレームサイズを使用して、完全に重なっているようにしてください。あなたは必要なものすべてを見ることができ、そのサブビューではないので、相互作用は起こらず、接触は登録されますが効果はありません。 :P

は良いアイデアあなたのコードの一部を投稿していない限り...

+0

私の間違い...実際、 "buvard"はUIImageViewですが、問題は同じです。 – tvincent

+0

もちろん、私が書いたことを示すことができます。しかし、それはIMO、本当に面白いではありません。strokesViewController.hで : '@property(nonatormic、保持)IBOutlet UIImageView * strokesViewController.mで (のviewDidLoadで)buvard':[bringSubviewToFront buvard:strokesView] '; buvard.userInteractionEnabled = YES; ' 私はあなたが示唆したのと同じように、ビューで同じことを試みましたが、うまくいきませんでした... – tvincent

+0

あなたはユーザーが表面上に描画できないようにしたくありませんでしたか? は、userInteractionEnabledを 'NO'に設定しないでください。 –

4

あなたが実際に反対のことをやってみたいことがあります。ユーザーの操作や接触を無効にすると、ビューは基本的には表示されなくなり、次のビューに渡されます。

ビューでこれらの接触を捕捉したいので、あなたはuserInteractionEnabledが必要です。

+0

私はあなたがここで何を意味するのか理解しています。しかし、ユーザーインタラクションを有効にして(インターフェイスビルダを使用し、userInteractionEnabledをYESに設定すると)、UIImageViewの後ろに描画できます。 – tvincent

+0

C4-Travisのコメントを試してみてください。 – Dancreek

+0

これは私が必要としたものです。 UIImageViewの背後にあるボタンとのやりとりをブロックするためにユーザーのやりとりを有効にします。ありがとう! – RanLearns

0

Dancreekの応答に加えて、対話をキャプチャするようにbuvard.userInteractionEnabled = YES;を設定する必要があります。

また、タッチイベントを受信するビューがbuvardになるようにbuvard.exclusiveTouch = YES;を設定する必要があります。

buvardを削除するときに、buvard.exclusiveTouch = NO;を設定して、他のビューがタッチを受け取る能力を回復できるようにする必要があります。

関連する問題