【iOS備忘録】複数のViewをドラッグで移動する
UIPanGestureRecognizer
まずは、いくつかのViewを配置します。
UILabel *label = [[UILabel alloc]init];
label.frame = CGRectMake(100, 100, 60, 20);
label.backgroundColor = [UIColor yellowColor];
label.textColor = [UIColor blueColor];
label.font = [UIFont fontWithName:@"AppleGothic" size:12];
label.text = @"hoge";
label.userInteractionEnabled = YES;
[self.view addSubview:label];
UIView *View1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
View1.center = CGPointMake(100, 200);
View1.backgroundColor = [UIColor blueColor];
[self.view addSubview:View1];
UIView *View2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
View2.center = CGPointMake(110, 210);
View2.backgroundColor = [UIColor greenColor];
[self.view addSubview:View2];
[self setPanGesture:label];
[self setPanGesture:View1];
[self setPanGesture:View2];
1つのUILabel、2つのUIViewを配置してみました。緑が上になっていますね。
こんな感じになります。
これをドラッグして移動してみましょう。
-(void)setPanGesture:(UIView*)view{
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragged:)];
[view addGestureRecognizer:panGesture];
}
-(void)dragged:(UIPanGestureRecognizer*) sender{
if(sender.state == UIGestureRecognizerStateEnded){
//ドラッグ終了時の処理
}else{
UIView *draggedView = sender.view;
//選択したViewを最前面に
[self.view bringSubviewToFront:draggedView];
//ドラッグ移動した分だけViewを移動
CGPoint delta = [sender translationInView:draggedView];
CGPoint movedPoint = CGPointMake(draggedView.center.x + delta.x, draggedView.center.y + delta.y);
draggedView.center = movedPoint;
//ドラッグの初期化
[sender setTranslation:CGPointZero inView:draggedView];
}
}
ドラッグしてみました。ドラッグしているものが最前面になっていますね。