Сохранить начальное местоположение UIView в Objective C - PullRequest
0 голосов
/ 24 ноября 2011

Итак, я пытаюсь сохранить начальное местоположение UIView, чтобы созданный мной блок мог / вернется обратно в это место, если он не будет расположен в правильном положении. Я создал CGPoint под названием «startPoint», и я хотел бы установить его координаты в начальной точке блока. Что происходит сейчас, так это то, что я получаю блок, и когда я его отпускаю, он переходит к 0,0 координатам на экране (вверху слева). Не совсем уверен, что мне не хватает. любая помощь будет оценена. Код ниже для жеста-распознавателя.

- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer {
    UIView *view = [gestureRecognizer view];
    CGPoint startPoint;


    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
        view.backgroundColor = [UIColor redColor];
        startPoint = [gestureRecognizer translationInView:self.view];
    }

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

        CGPoint translation = [gestureRecognizer translationInView:view.superview];

        view.center = CGPointMake(view.center.x+translation.x, view.center.y+translation.y);

        [gestureRecognizer setTranslation:CGPointZero inView:view.superview];

    } else if ([gestureRecognizer state] == UIGestureRecognizerStateEnded) {

//        double snapX = round(view.center.x / 110) * 110;
//        double snapY = round(view.center.y / 110) * 110;

        double snapX = round(startPoint.x);
        double snapY = round(startPoint.y);

        view.backgroundColor = [UIColor blueColor];

        [UIView animateWithDuration:0.3 animations:^{
            view.center = CGPointMake(snapX, snapY);
        }];
    }
}

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

У вас есть локальная переменная с именем startPoint. Это означает, что pan: воссоздает переменную каждый раз, когда она вызывается (pan:). Вам нужно сделать startPoint переменной экземпляра или свойством, чтобы оно создавалось один раз и сохранялось при вызовах pan:.

0 голосов
/ 24 ноября 2011

Попробуйте изменить эту строку:

startPoint = [gestureRecognizer translationInView:self.view];

к этому:

startPoint = [gestureRecognizer translationInView:view.superview];

Кроме того, я не уверен, что могу по-настоящему понять, что происходит из вашего описания, но, похоже, вы должны объявить startPoint вне рамок этого метода.

...