カスタムビュー作った以上はタッチ対応でしょ。
ちゅ~ことで「iPhone OS プログラミングガイド」だ。当然イベント処理の章で説明されてます。
それによると
をUIViewを継承したクラス(今回ならFlipsideView)に加えればいいみたいっす。
はiPhoneアプリ開発、その(31)の棒取りゲームでちょっとだけ経験済みだけどね。座標とかドラッグは初体験。
今回は実験的に、touchesBeganでクリックされた位置を記憶してtouchesMovedで最初の位置からの距離をlevel=0.0~1.0に変換して設定するということにします。
で、例によってサンプルソースですが
てのがありました。で、この中のtouchesBeganメソッドなんかで
て、なんざましょ。ま~雰囲気的にわかるけど...
前回紹介した「Objective-C 2.0プログラミング言語」を調べると高速列挙の章にfor…in機能として紹介されてました。
そんな感じ。便利やわ~。
Objective-C 2.0限定の超マイナー機能だけど。
でもって
で自分のビュー上での位置がとれます。ということでFlipsideView.h側に
を定義したらFlipsideView.mにtouchesBegan~touchesCancelledを実装していきます。
今回は複数の指に対応しないので一つ目でいきなりbreakするっす。
で、touchesMoved側で同じようにしてドラッグ中の座標との距離計算。距離計算は中学生の数学なので説明しない。setNeedsDisplayも前に説明したのでパスね。ブログ内検索してちょ。
touchesEnded、touchesCancelledは今回は用がないので空のまま。
ついでに今、気づいたんだけど、画像を表示したので隠れてしまった
を、画像の後に移動することで復活させる。
実験的に文章を斜めに、縦長文字で表示してみました。
ロッケンローラぽい?
これが例のCTMてやつなんだけど、これは次回。クォーツの世界にヒントがあると思われ。
どこでもいいからクリックしてそのままドラッグするとlevelが0.0~1.0の範囲で変わります。
------------
サンプルプロジェクト:Chimpanzee-20.zip
ちゅ~ことで「iPhone OS プログラミングガイド」だ。当然イベント処理の章で説明されてます。
それによると
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
をUIViewを継承したクラス(今回ならFlipsideView)に加えればいいみたいっす。
touchesEnded
はiPhoneアプリ開発、その(31)の棒取りゲームでちょっとだけ経験済みだけどね。座標とかドラッグは初体験。
今回は実験的に、touchesBeganでクリックされた位置を記憶してtouchesMovedで最初の位置からの距離をlevel=0.0~1.0に変換して設定するということにします。
で、例によってサンプルソースですが
Touches
てのがありました。で、この中のtouchesBeganメソッドなんかで
for (UITouch *touch in touches) {
て、なんざましょ。ま~雰囲気的にわかるけど...
前回紹介した「Objective-C 2.0プログラミング言語」を調べると高速列挙の章にfor…in機能として紹介されてました。
touchesに含まれる不特定数のUITouchを順番にtouchに取り出して最後を取り出すまでループする
そんな感じ。便利やわ~。
Objective-C 2.0限定の超マイナー機能だけど。
でもって
[touch locationInView:self]
で自分のビュー上での位置がとれます。ということでFlipsideView.h側に
CGPoint clickPos;
を定義したらFlipsideView.mにtouchesBegan~touchesCancelledを実装していきます。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches) {
clickPos = [touch locationInView:self];
break;
}
}
今回は複数の指に対応しないので一つ目でいきなりbreakするっす。
で、touchesMoved側で同じようにしてドラッグ中の座標との距離計算。距離計算は中学生の数学なので説明しない。setNeedsDisplayも前に説明したのでパスね。ブログ内検索してちょ。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
for (UITouch *touch in touches){
CGPoint pt = [touch locationInView:self];
pt.x -= clickPos.x;
pt.y -= clickPos.y;
double d = pt.x * pt.x + pt.y * pt.y;
d = sqrt(d);
level = d / 100.0;
if (level > 1.0)
level = 1.0;
[self setNeedsDisplay];
break;
}
}
touchesEnded、touchesCancelledは今回は用がないので空のまま。
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
}
ついでに今、気づいたんだけど、画像を表示したので隠れてしまった
[str drawAtPoint:CGPointMake(0, 0) withFont:font];
を、画像の後に移動することで復活させる。
実験的に文章を斜めに、縦長文字で表示してみました。
ロッケンローラぽい?
これが例のCTMてやつなんだけど、これは次回。クォーツの世界にヒントがあると思われ。
どこでもいいからクリックしてそのままドラッグするとlevelが0.0~1.0の範囲で変わります。
------------
サンプルプロジェクト:Chimpanzee-20.zip