iPhoneプログラミングの質問です。

ズバリな回答には500pt+いるか差し上げます。

iSteam(http://www.ideaxidea.com/archives/2009/01/iphoneisteam.html
のようなアプリを作りたいのですが、指で擦った部分だけ他の画像を表示させるのは、
どのような実装方法でできますでしょうか?
実装の概要、サンプルコードやクラス名、メソッド名を挙げてください。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2010/01/28 13:56:20
  • 終了:2010/02/01 21:18:33

回答(1件)

id:australiagc No.1

australiagc回答回数467ベストアンサー獲得回数902010/01/28 15:22:24

ポイント60pt

画像処理自体はあまりやっていないのでどういった画像編集のオプションが最適かは自信がありませんが、とりあえずイベントに関して。


ご存知かとは思いますが、画面がタッチされたかどうかのイベントはUIViewクラスで処理します。

http://developer.apple.com/iPhone/library/documentation/UIKit/Re...

もちろん、具体的なタッチイベントの内容は自分で定義するわけですから、エクステンドしてカスタムのクラスを作る必要があります。

ちなみに、タッチイベントそのものはUITouchクラスで定義されており、UIEventクラスからもアクセスできます。

http://developer.apple.com/IPhone/library/documentation/UIKit/Re...

http://developer.apple.com/IPhone/library/documentation/UIKit/Re...

公式のプログラミングガイドにもあります。

http://developer.apple.com/IPhone/library/documentation/iPhone/C...


具体的なタッチイベントの処理方法は、いくつか公式のサンプルもあります。

http://developer.apple.com/iPhone/library/samplecode/Touches/ind...

http://developer.apple.com/iPhone/library/samplecode/MoveMe/inde...


touches~系のイベントにはUIEventとタッチイベントのリスト (NSSet *)touches がパラメータとして渡されているので、touchesから各UITouchオブジェクトへアクセスすれば、タッチのlocationInView(対象となっているUIView上のどの座標がタッチされたのか)やpreviousLocationInView(前回のイベント処理の際の座標)、view(対象となっているUIView)、phase(タッチされたのか、移動しているのか、それともタッチを離したのか)などが分かります。


処理の流れをざっと説明すると、

・ touchesBeganイベントで初期タッチされた周囲の画像を処理。

・ touchesMovedイベントで前回のタッチ地点と移動先のタッチ地点の間の画像を処理。

・ touchesEndedイベントで前回のタッチ地点とタッチが終了した(指を離した)地点の間の画像を処理。

となるでしょう。


次に各イベント内で取得した座標を使ってどうやって画像を変えるかですが・・・これがちょっと自信ないです。

もし画面上にUIImageViewを含む複数の小さなカスタムUIViewがあり、タッチされたカスタムUIView内のUIImageを「差し替える」だけであれば、touches~イベントをコールしたカスタムUIViewのUIImageViewの中のUIImageを他の画像に差し替えれば良いだけです。(普通に、[UIViewの中のUIImageView].[UIImageのプロパティ名] = [新しいUIImage];でできます)

しかし、iDoodleやiStreamの様にフリーハンドで色やアルファ効果を「塗る」のはやったことが無いので詳しくは分かりませんね・・・。

デフォルトのCore Graphicsライブラリを使う方法、OpenGLを使う方法、Quartzを使う方法がありますが、どれが一番良いのかは分かりません。

Core Graphicsであれば、英語の掲示板ですがここに考察といくつかのサンプルがあります。

http://stackoverflow.com/questions/1798414/drawing-incrementally...


もし英語が少しできるのであれば、上記のstackoverflowで聞いてしまうのが楽ですよ。

iPhoneデベロッパの方も非常に多く、90%以上の確率で的確な答えをくれますので。

id:uniom

イベントの取得方法は分かりました。

その先の、大まかな流れと、CoreGraphicsライブラリを使ったサンプルが知りたいです。

stackoverflowは日本語のサイトに無い情報も載ってそうですね。調べてみます。

2010/01/28 16:19:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません