2012年04月08日

ドラックで画像を動かす。

さっそく、画像を動かしてみましょう。 前回表示した画像の 表示原点を動かしますので、UIImageViewのviの宣言をViewController.hに移します。
@interface ViewController : UIViewController{
    UIImageView *iv;
}
ViewController.mのほうは、
    iv = [[UIImageView alloc] initWithImage:myImage];
と、「UIImageView *」が、はずれます。
まず、tapしたら、そこへ移動するようにしましょう。touchesBeganというデリゲートメソッドを使います。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {    
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self.view];
    NSLog(@"x,y=%.2f,%.2f",location.x,location.y);
    CGRect originalRect = iv.frame;
    originalRect.origin.x = location.x;
    originalRect.origin.y = location.y;
    iv.frame = originalRect;
}
ざっくり説明しておくと、 画面がタップされたらtouchesBeganふぉにゃららを呼び出す仕組みはiOSに組込まれてますので、 これを、オーバーライドしてやります。 複数のタッチ(された場合)から一つを取り出します。 取り出したタッチのself.view(320x460の表示エリア)内の位置(x,y)を取り出します。 テスト用に、それをログに書き出します。 UIImageViewの場所を書き換えるため、frameプロパティ(x,y,width,height)を読み出します。 frameプロパティのx,yをタップした位置のx,yに書き換えて、 UIImageViewに戻してやります。
これで、タップした位置に(画像の左上が)移動します。
20120408_tap.png
タップの次はドラックに付いてくるようにしましょう。
touchesMovedデリゲートメッソドを使います。返してくる値は同様にしてx,yを取得出来ますので、 中身は同じですね^^
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self.view];
    NSLog(@"x,y=%.2f,%.2f",location.x,location.y);
    CGRect originalRect = iv.frame;
    originalRect.origin.x = location.x;
    originalRect.origin.y = location.y;
    iv.frame = originalRect;
}
ここまでのサンプルコード。
20120408_2_png_display.zip

いきなり画像が飛んできたり、指先に左上の角が貼り付いたり、 ちょっと、素人っぽいので、次回はもう一工夫したいと思います。 87.gif136.gif

posted by cho at 13:36| iPhone