iOS: manipulação adequada dos gestos de panorâmica

O uso de reconhecedores Pan Gesture em seu aplicativo iOS torna a experiência divertida e conveniente. Você pode achar que deseja atribuir um gesto a uma visualização específica e mover essa visualização, como uma imagem para arrastar e soltar ou o cabeçalho de alguma visualização de conteúdo.

Nesses casos, faz sentido mover a visualização pela mudança na posição do toque conforme o usuário move o dedo. Uma coisa a se ter em mente é que o ponto de toque e ocorre em qualquer lugar nessa visualização, muuuuito … você vai querer levar em conta o deslocamento do ponto de toque nessa visualização enquanto calcula para onde movê-lo. Dê uma olhada no código abaixo para obter uma maneira fácil de fazer isso:

//In your header file, make sure to create a reference to your initial
//touch point for later reference
@property (strong, nonatomic) CGFloat touchPositionInHeaderY;

//In your implementation file (.m)
CGFloat y = [gestureRecognizer locationInView:self.view].y;

if(gestureRecognizer.state == UIGestureRecognizerStateBegan){
//Snag the Y position of the touch when panning begins
_touchPositionInHeaderY
= [gestureRecognizer locationInView:_menuHeaderView].y;
}
else if(gestureRecognizer.state == UIGestureRecognizerStateChanged){
//This represents the true offset with the touch position accounted for
CGFloat trueOffset = y - _touchPositionInHeaderY;

//Use this offset to adjust the position of your view accordingly
menuFrame
.origin.y = trueOffset;
_menuView
.frame = menuFrame;
}

Então, se você tocar no topo da visualização do cabeçalho (se for isso que você deseja deslocar), este código garante que não haja nenhum “salto” irregular, como ocorreria se você estivesse simplesmente atribuindo o origin.y da visualização panorâmica ao offset.y real do toque.

É fácil iniciar um aplicativo iOS, mas é bastante difícil terminar um com o polimento esperado dos usuários iOS. Vá em frente, faça coisas suaves.