おとうさまくんの手作り工房

日曜大工としてのプログラミングを紹介します。

【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を配置してみました。緑が上になっていますね。

こんな感じになります。

f:id:otousamakun:20151122195853p:plain

これをドラッグして移動してみましょう。

 

-(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];

    }

}

 

 

ドラッグしてみました。ドラッグしているものが最前面になっていますね。

f:id:otousamakun:20151122195902p:plain