3

UIPanGesture を使用して、iPhone の画面上で画像を移動しています。一部の画像は小さく、それらを指で動かすと、画像自体が見えにくくなります。移動中に画像の中心を設定して、画像の中心が実際にはタッチ位置に設定するのではなく、タッチ位置の10ポイント前になるようにします。

以下をテストしましたが、Y から 10 を繰り返し減算することで、一定の 10 ポイントのオフセットを維持するのではなく、画像がタッチ位置からどんどん遠ざかり、最終的には画面から外れることにすぐに気付きました。

これをどのように行う必要がありますか?

- (void) TestGestureMethod:(UIPanGestureRecognizer *) panGesture {
    CGPoint translation = [panGesture translationInView:self.view];
    switch (panGesture.state) {
    case UIGestureRecognizerStateBegan:
        [self.view bringSubviewToFront:testObject];
        break;
    case UIGestureRecognizerStateChanged:
        testObject.center = CGPointMake(testObject.center.x + translation.x,
                                        testObject.center.y + translation.y);
        testObject.center = CGPointMake(testObject.center.x, testObject.center.y - 10);
        break;
    case UIGestureRecognizerStateEnded:
        break;
    }
    [panGesture setTranslation:CGPointZero inView:self.view];
}
4

3 に答える 3

4

画像を翻訳するのではなく、手動で中心を設定しているので、translationInView:の代わりにUIGestureRecognizer locationInView:を使用することを検討しましたか?

あなたはこのようなことをすることができます...

- (void)TestGestureMethod:(UIPanGestureRecognizer *)panGesture
{
    CGPoint location = [panGesture locationInView:self.view];

    switch (panGesture.state) {
        ...
        case UIGestureRecognizerStateChanged:
            testObject.center = CGPointMake(location.x, location.y - 10);
        break;
        ... 
    }
}

これにより、画像の中心は常にタッチのわずか10ポイント下になります。

于 2013-01-19T07:47:06.737 に答える
0

これを試してください、これはあなたの問題を解決します:

- (void)handlePanGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
    UIView *piece = [gestureRecognizer view];

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
        CGPoint translation = [gestureRecognizer translationInView:[piece superview]];

        [piece setCenter:CGPointMake([piece center].x + translation.x, [piece center].y + translation.y)];
        [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]];
    }
}

これがお役に立てば幸いです。

于 2013-01-19T09:01:07.933 に答える
0

これを試して:

- (void) TestGestureMethod:(UIPanGestureRecognizer *) panGesture {
    CGPoint translation = [panGesture translationInView:self.view];
    switch (panGesture.state) {
    case UIGestureRecognizerStateBegan:
        [self.view bringSubviewToFront:testObject];
        testObject.center = CGPointMake(testObject.center.x, testObject.center.y - 10);
        break;
    case UIGestureRecognizerStateChanged:
        testObject.center = CGPointMake(testObject.center.x + translation.x,
                                        testObject.center.y + translation.y);

        break;
    case UIGestureRecognizerStateEnded:
        break;
    }
    [panGesture setTranslation:CGPointZero inView:self.view];
}
于 2013-01-19T07:43:02.603 に答える