スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

[iPhone][Objective-C]UIViewをタッチしながら動かす方法

スタンプを貼る動作があるアプリの場合、
画像を選択して、画面をタッチしたあとそのまま動かしたり、
いったん手を話してからまた動かせるようなものがあります。

いろいろな処理と組み合わさって複雑になってくると大変ですが、
基本的な部分は同じです。

UIViewのtransformプロパティを使います。



スタンプを貼り付けたいViewの下記3つのメソッドを編集します。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event


まずプロパティでスタンプをひとつ作っておきます。
@property (nonatomic, retain) UIImageView *stampUIImageView;


スタンプを貼り付けたいViewを初期化するときに一緒に初期化。
UIImageView *stampUIImageView = [[[UIImageView alloc] init] autorelease];



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
// ユーザによりViewへのタッチが開始したときに呼び出されるメソッド
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

// ユーザがタッチした座標を取得
CGPoint point = [((UITouch*)[touches anyObject])locationInView:self];

// stamp画像を取得
UIImage *stampUIImage = [UIImage imageNamed:@"Sample.png"];;

// スタンプを表示するViewのサイズや大きさを調整
self.stampUIImageView.image = pliclaUIImage;
self.stampUIImageView.frame = CGRectMake(point.x - stampUIImage.size.width/2 ,
point.y - stampUIImage.size.height/2,
stampUIImage.size.width,
stampUIImage.size.height);
[self addSubview:stampUIImageView];
}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
// ユーザがドラッグしたときに呼び出されるメソッド
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

// ユーザがドラッグした座標を取得
CGPoint point = [((UITouch*)[touches anyObject])locationInView:self];

// ドラッグ中の座標を使って移動
self.stampUIImageView.transform = CGAffineTransformMakeTranslation(point.x - self.stampUIImageView.center.x ,
point.y - self.stampUIImageView.center.y);
}



- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
// ユーザがタッチを終了したときに呼び出されるメソッド
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

// ユーザがドラッグを終了した座標を取得
CGPoint point = [((UITouch*)[touches anyObject])locationInView:self];

// 今回はstampUIImageViewをプロパティとして持っていたので、それを別のViewに移す
// はじめに配列を用意して、そこへどんどんViewを追加していき、スタンプが貼り付けられるViewでは常に一番新しいViewだけを今までの処理で使うのも良いかもしれない
// 配列を用いた方が最後にすべて重ねあわせて一枚の画像にする際にもforで回せるため便利かもしれない
UIImageView *touchEndImageView = [[[UIImageView alloc] init] autorelease];
touchEndImageView.image = self.stampUIImageView.image;
touchEndImageView.frame = self.stampUIImageView.frame;
[self addSubview:touchEndImageView];

// いらなくなったViewをリムーブ
[self.stampUIImageView removeFromSuperview];
}



まとめ
Viewの3つのメソッド、
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

これらをちょっといじるだけで簡単にスタンプを動かすことができるようになりました。

今回は非常にシンプルに実装しましたが、配列などを使うともっと便利に運用できるかもしれないです。
また、貼り付けるスタンプのVIewもクラスを作っておいて、
置いたあとに再度動かすことができるようにしたりすると完成度が高くなりますね。

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

PicUp App
iPhoto - Apple App
カテゴリ: 写真
価格: ¥1,300
蝉丸 -梅- App
カテゴリ: 教育
¥500
プロフィール

Author:monoqlo
2009年末にiPhone3GSを購入して以来Appleファンに。
その後MacBookやiPad2なども購入。
たまぁにプログラミングなんかもしてます。

検索
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
リンク