Правильный способ использования LongPressGestureRecognizer - PullRequest
0 голосов
/ 14 февраля 2019

Я запутался, где и как создавать переменные в обработчике для UILongPressGestureRecognizer (LPGR).

Я создаю LPGR с:

-(void) createLongPress {
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                           initWithTarget:self action:@selector(handleLongPress:)];
[self.view addGestureRecognizer:longPress];
}

Поскольку обработчик вызывается иоднако, я не уверен, как и где создавать экземпляры переменных.

Следующий код работает, но я обеспокоен тем, что он создает экземпляры переменных снова и снова.Должен ли я переместить их в case UIGestureRecognizerStateBegan: state, который, я полагаю, вызывается только один раз, или можно оставить верхнюю часть метода, который вызывается снова и снова.

Вот код в моемобработчик

    - (IBAction)handleLongPress:(id)sender {
        //ALL THIS CODE IS CALLED OVER AND OVER
//Does this mean these variables are getting instantiated over and over?
        UILongPressGestureRecognizer *longPress = (UILongPressGestureRecognizer *)sender;
        UIGestureRecognizerState state = longPress.state;
        CGPoint location = [longPress locationInView:self.view];

        switch (state) {
            case UIGestureRecognizerStateBegan: {
                //Code called just once at beginning

                  //DO SETUP            }
                break;
            } 
            case UIGestureRecognizerStateChanged: {
               //Update stuff
                                     }
                break;
            }

            case UIGestureRecognizerStateEnded: {
                    //cleanup
                }
            default: {
              //handle default case                
               }           
                break;
            } 
    }
...