0

私のアプリには、オブジェクトをドラッグするためのこのコードがあります

ジェスチャーを設定しました:

UILongPressGestureRecognizer *downwardGesture = [[UILongPressGestureRecognizer new] initWithTarget:self action:@selector(dragGestureChanged:)];
downwardGesture.minimumPressDuration = 0.2;
[grid_element addGestureRecognizer:downwardGesture];
for (UILongPressGestureRecognizer *gestureRecognizer in self.view.gestureRecognizers)
{
    [gestureRecognizer requireGestureRecognizerToFail:downwardGesture];
}

そして私の方法では:

- (void) dragGestureChanged:(UILongPressGestureRecognizer*)gesture{

    UIImageView *imageToMove;
    CGPoint pointInSelfView;

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        dragging = TRUE;
        CGPoint location = [gesture locationInView:grid_element];
        NSIndexPath *selectedIndexPath = [grid_element indexPathForItemAtPoint:location];
        if (selectedIndexPath==nil) {
            dragging = FALSE;
            return;
        }

        indexToHide = selectedIndexPath.row;
        imageToMove = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image_1.png"]];
        [self.view addSubview:imageToMove];
        pointInSelfView = [gesture locationInView:self.view];
        [imageToMove setCenter:pointInSelfView];


    }
    else if (gesture.state == UIGestureRecognizerStateChanged)
    {
        pointInSelfView = [gesture locationInView:self.view];
        [imageToMove setCenter:pointInSelfView];

    }
    else if (gesture.state == UIGestureRecognizerStateEnded     ||
             gesture.state == UIGestureRecognizerStateCancelled ||
             gesture.state == UIGestureRecognizerStateFailed)
    {
        dragging = FALSE;
    }
}

で機能しUIGestureRecognizerStateBegan、正しい位置にimageToMove追加されますが、ドラッグしないでください。for inを表示すると、正しく変更されます。問題はどこだ?self.viewimageToMoveUIGestureRecognizerStateChangedNSLogpointInSelfViewUIGestureRecognizerStateChanged

編集

imageToMove を IBOutlet として使用すると正常に動作しますが、違いがわかりません。

4

1 に答える 1

0

ARC を使用している場合、iOS システムは object- を解放していimageToMoveます。
保持属性を使用してプロパティを作成すると、システムはオブジェクトを保持し、移動します。

私が混乱しているのは、なぜ にエラーがないのかということだけです[imageToMove setCenter:pointInSelfView];「メッセージは割り当て解除されたインスタンスに送信されます」というエラーが表示されるはずです。しかし、問題は imageToMove のメモリ解放によるものだと確信しています。

于 2013-10-16T09:09:12.773 に答える