1

私はSOの別の紳士からこのコードを適応させました。これまでのところうまく機能していますが、私のアプリ内では、かなりの数の画像ビュー/ボタンを移動する予定です。これを実装するための最良の方法は何でしょうか?おそらく、オブジェクトを配列に入れて列挙子を使用しますか?他の誰かが同じようなことをした場合は、正しい方向に少しずつ動かしていただければ幸いです。ちなみに、それらはすべてビュー内で異なる座標を持っています

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragGesture:)];

[dragImage addGestureRecognizer:panGesture];
[dragImage setUserInteractionEnabled:YES];
}

#pragma mark -
#pragma mark UIPanGestureRecognizer selector
- (void) dragGesture:(UIPanGestureRecognizer *) panGesture{


CGPoint translation = [panGesture translationInView:self.view];

switch (panGesture.state) {
    case UIGestureRecognizerStateBegan:{
        originalCentre = dragImage.center;
    }
        break;
    case UIGestureRecognizerStateChanged:{
        dragImage.center = CGPointMake(dragImage.center.x + translation.x,
                                       dragImage.center.y + translation.y);
    }
        break;
    case UIGestureRecognizerStateEnded:{            
        if (((dragImage.center.x >= 280) && (dragImage.center.y >= 280) &&
            (dragImage.center.x <= 450) && (dragImage.center.y <= 450))) {

            dragImage.center = CGPointMake(300, 300);
            [dragImage setUserInteractionEnabled:NO];
            break;
        }
        [UIView animateWithDuration:0.5 
                         animations:^{
                             dragImage.center = originalCentre;
                         }
                         completion:^(BOOL finished){
                         }];
    }
        break;
    default:
        break;
}

[panGesture setTranslation:CGPointZero inView:self.view];
}

-(IBAction)clear{
[UIImageView animateWithDuration:0.5 animations:^{
dragImage.center = CGPointMake(100, 200);
}];

[dragImage setUserInteractionEnabled:YES];
}

この質問をお読みいただき、ありがとうございます。

4

1 に答える 1

2

を使用recognizer.viewして、移動中のビューを判別できます。常に変更する代わりにdrawImage、単に使用しますrecognizer.view。レコグナイザーが開始されたら、ドラッグ アンド ドロップ可能にしたくないサブビューの場合は、( thenに設定enabledして)必ずキャンセルしてください。NOYES

移動するビューによっては、これらのマジック ナンバーの一部を変更する必要がある場合があります。

于 2012-05-05T22:09:05.100 に答える