Долгое нажатие сбрасывает 2 булавки с каждым нажатием - PullRequest
2 голосов
/ 06 апреля 2011

Я получил мое приложение, сбросив штифт длинным касанием, я позволяю пользователям сбрасывать только два пина, и это работает, я думаю ... но каждый раз, когда я нажимаю, чтобы добавить штырек в симуляторе, он добавляет два пина (не только один). . вот код:

-(void) handleLongPressGesture:(UIGestureRecognizer*)sender
{
    if (pinId < 3) {
        // Here we get the CGPoint for the touch and convert it to
        // latitude and longitude coordinates to display on the map

        CGPoint point = [sender locationInView:self.mapView];       
        CLLocationCoordinate2D coord = [self.mapView convertPoint:point
                                            toCoordinateFromView:self.mapView];

        if (pinId == 1) {
            lat1 = coord.latitude;
            long1 = coord.longitude;

            MapAppAnnotation* annotation;
            annotation = [[MapAppAnnotation alloc] initWithCoordinate:coord
                                                andID:pinId];

            [mapView addAnnotation:annotation];

            MKCircle* circle = [MKCircle circleWithCenterCoordinate:coord
                                        radius:5000];
            [mapView addOverlay:circle];    
            pinId++;

        } else {
            lat2 = coord.latitude;
            long2 = coord.longitude;
            MapAppAnnotation* annotation2;
            annotation2 = [[MapAppAnnotation alloc] initWithCoordinate:coord
                                                andID:pinId];

            [mapView addAnnotation:annotation2];
        }
    } 
}

Я хотел бы знать, является ли моя ошибка (кодовая ошибка ..) или симулятором iPhone, который получает мое длинное нажатие мыши, как два разных длинных нажатия ... это возможно?

1 Ответ

4 голосов
/ 06 апреля 2011

Ваш селектор вызывается один раз, когда начинается жест, и снова, когда он заканчивается.Проверьте состояние жеста и действуйте на соответствующий.

-(void)handleLongPressGesture:(UIGestureRecognizer*)sender
{
    if (sender.state != UIGestureRecognizerStateEnded) return;

    // otherwise, handle the gesture as before
}

Ссылка на класс для UILongPressGestureRecognizer говорит:

Жесты длительного нажатия являются непрерывными.Жест начинается (UIGestureRecognizerStateBegan), когда количество допустимых пальцев (numberOfTouchesRequired) было нажато в течение указанного периода (минимальная длительность) и касания не выходят за пределы допустимого диапазона движения (allowableMovement).Средство распознавания жестов переходит в состояние «Изменение» при каждом перемещении пальца и заканчивается (UIGestureRecognizerStateEnded) при поднятии любого из пальцев.

...