ぽりえすてる製メモ帳

ぽりえすてる http://polyester.toypark.in/index.html

2014年08月

要約

 ジェスチャリコグナイザのデリゲートはジェスチャリコグナイザの振る舞いの微調整のためにUIGestureRecognizerDelegateプロトコルを採用する必要があります。デリゲートはジェスチャリコグナイザからメッセージを受けてレスポンスを送ることで、ジェスチャリコグナイザの動作に影響を与えたり、他のジェスチャリコグナイザとの関係を指定することができます。例えば、同時のジェスチャ認識を許可したり、逆に他のジェスチャの失敗を要求したりします。


タスク

ジェスチャ認識の統制

  •     – gestureRecognizerShouldBegin:
  •     – gestureRecognizer:shouldReceiveTouch:

同時認識の管理

  •     – gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

失敗要求のセッティング

  •     – gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
  •     – gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:



 
インスタンスメソッド

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

デリゲートにgestureRecognizerがotherGestureRecognizerによって失敗を要求されるか訪ねます。このメソッドはジェスチャ認識の度によばれるので、失敗の要求基準は緩めにするべきで、またビュー階層の異なるジェスチャリコグナイザに対して行うべきです。YESを返すことで、二つのジェスチャリコグナイザ間で動的な失敗要求ができます。デフォルトの戻り値はNOです。つまり全てのジェスチャリコグナイザは他のジェスチャリコグナイザから失敗を要求されません。YESを返したとき失敗要求をすることが保証される一方で、NOを返したとき失敗要求がされないことを保証するわけではないことに留意して下さい。なぜなら、otherGestureRecognizer側のサブクラス又はデリゲートメソッドで、失敗要求をするかもしれないからです。


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

デリゲートにgestureRecognizerがtouchを受け取るか訪ねます。YES(デフォルト値)を返すとジェスチャリコグナイザがタッチを検査することを許可します。NOを返すと、ジェスチャリコグナイザがタッチオブジェクトを受け取ることはできません。このメソッドは、新たなタッチに対してジェスチャリコグナイザのtouchesBegan:withEvent:が呼ばれる前に、呼ばれます。


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

デリゲートに、渡される二つのジェスチャリコグナイザが同時に認識されるか訪ねます。YESを返すと二つのジェスチャリコグナイザは同時に認識されます。デフォルト値はNOでいかなるジェスチャも同時には認識されません。このメソッドはgestureRecognizerあるいはotherGestureRecognizerがもう一方のジェスチャ認識を妨げようとするとき呼ばれます。YESを返すと同時認識が保証される一方で、NOを返しても同時認識がされないことを保証するわけではないことに留意して下さい。なぜならもう一方のジェスチャリコグナイザのデリゲートがYESを返すかもしれないからです。


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

デリゲートに、ジェスチャリコグナイザが他のジェスチャリコグナイザに失敗を要求するか訪ねます。このメソッドはジェスチャ認識の度によばれるので、失敗の要求基準は緩めにするべきで、またビュー階層の異なるジェスチャリコグナイザに対して行うべきです。YESを返すことで、二つのジェスチャリコグナイザ間で動的な失敗要求ができます。デフォルトの戻り値はNOです。つまり全てのジェスチャリコグナイザは他のジェスチャリコグナイザに失敗を要求しません。YESを返したとき失敗要求をすることが保証される一方で、NOを返したとき失敗要求がされないことを保証するわけではないことに留意して下さい。なぜなら、otherGestureRecognizer側のサブクラス又はデリゲートメソッドで、失敗要求をするかもしれないからです。


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

デリゲートに、ジェスチャリコグナイザがタッチを翻訳し始めていいか訪ねます。YES(デフォルト値)を返すとジェスチャリコグナイザにタッチの翻訳を続行するよう伝えます。NOを返すとジェスチャ認識を阻止させます。このメソッドはUIGestureRecognizerStatePossible状態から変わるときに呼ばれます。NOを返すとUIGestureRecognizerStateFailed状態に遷移します。






概要
 UIPinchGestureRecognizerは
UIGestureRecognizerコンクリートサブクラスで二本の指のタッチによるピンチングジェスチャーがないか観察します。二本の指を互いに近づけて動かした場合、それは慣例的にズームアウトを意味し、逆に互いに遠ざけるように動かした場合ズームインを意味します。
ピンチングは連続ジェスチャーです。
 ジェスチャーは十分ピンチジェスチャーとして考えられる長さを二本の指が動いたときに始まり(UIGestureRecognizerStateBegan)、
画面に触れたままどちらかの指が動くと状態が変わって(UIGestureRecognizerStateChanged)、
両方の指がビューから離れた時点で終わります(UIGestureRecognizerStateEnded)。


タスク


ピンチングジェスチャーを解釈する
  • scale   property
  • veloity   property


プロパティ

scale     画面の二つのタッチの座標から計算した基準倍率。

velocityはread-onlyですが、scaleは値を代入することができます。scaleの値は常に絶対値です。前回の倍率との差分の値ではありません。最初にジェスチャが認識されたときと比較した値です。従って、ハンドラが呼ばれるたびにscaleの値をかけることはしないで下さい。


velocity     毎秒のピンチイン倍率の速度(read-only)

 



















四目並べアプリで、UIGestureRecognizerを使うことにしました。
UIGestureRecognizerはtouches~系のメソッドと相性が悪いことから評判があまりよくない印象を受けたのですが、UIGestureRecognizerDelegateと組み合わせて使うことで、けっこう複雑な処理もできるのではないかと思いました。

UIGestureRecognizerは抽象クラスで、そのコンクリートクラスで具体的なジェスチャー認識の処理を実装しています。使い方は簡単で、初期化時にターゲットとアクションを指定して、UIViewの-addGestureReconizer:を呼び出して登録しておくと、ジェスチャーを認識したときにターゲットのアクションが呼び出される訳です。

UIGestureRecognizer Class Referenceの日本語訳が
http://secondflush2.blog.fc2.com/blog-entry-977.html
にあり、これを読めば大体のことが分かります。




YouTubeにて現在制作しているiPhone用ぷよぷよアプリを公開しました。
初手三手補正はないけど、なぜか128手色均等は実装しています。

ぷよぷよの研究に役立つような機能を盛り込みたいと考えています。
今考えているのは、初手数手を網羅的に試せるモードです。
こんな機能があったらいいという意見があれば、この記事のコメントに書くか、
あるいは下のアドレス宛にお送りください。

polyester_toypark_in<a>yahoo.co.jp

↑<a>を@にして下さい。




--------------------------宣伝------------------------------------------------------------


iPhone用アプリピコピコUFO  App Store

screen520x924






ひとつのiOSアプリができるまで – Lluminoを支えてくれたものたち。
http://cocopon.me/blog/?p=1234

このページを参考にぷよぷよアプリの動画をキャプチャしました。
Reflector(キャプチャソフト)+kTouchPointerWindow(ライブラリ)という組み合わせです。
kTouchPointerWindowを自分のアプリに導入して、それをReflectorで撮影する訳です。
kTouchPointerWindowは少し修正して使用しましたが……

あと、ピコピコUFOは重すぎて断念。
Reflectorはゲームには向きませんね。

動画を2、3日中にアップロードしようと思います。

iPhoneアプリ ピコピコUFOをよろしくお願いします。
https://itunes.apple.com/jp/app/pikopikoufo/id893532935?mt=8

↑このページのトップヘ