Pergunta

Estou escrevendo um aplicativo em que o usuário precisa mover algumas coisas na tela usando os dedos e soltá -los. Para fazer isso, estou usando o Touchesbegan, Touchsended ... função de cada visão que deve ser movida.

O problema é que, às vezes, as visualizações são cobertas por uma visualização exibida usando a função [UIViewController PresentModalViewController]. Assim que isso acontece, o UIView que eu estava mudando para de receber os eventos do toque, pois estava encoberto. Mas não há nenhum evento dizendo que parou de receber os eventos, para que eu possa redefinir o estado da visão movida.

O seguinte é um exemplo que demonstra isso. As funções fazem parte de um UIView que está sendo mostrado na janela principal. Ele ouve tocar em eventos e, quando eu arrasto o dedo por alguma distância, apresenta uma visão modal que cobre tudo. No log de execução, ele imprime o que os eventos de toque são recebidos.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"touchesBegan");

  touchStart=[[touches anyObject] locationInView:self];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  CGPoint touchAt=[[touches anyObject] locationInView:self];
  float xx=(touchAt.x-touchStart.x)*(touchAt.x-touchStart.x);
  float yy=(touchAt.y-touchStart.y)*(touchAt.y-touchStart.y);
  float rr=xx+yy;

  NSLog(@"touchesMoved %f",rr);
  if(rr > 100) {
    NSLog(@"Show modal");
    [viewController presentModalViewController:[UIViewController new] animated:NO];
  }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"touchesEnded");
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
  NSLog(@"touchesCancelled");
}

Mas quando testo o aplicativo e aciono a caixa de diálogo modal a ser exibida, a seguir é a saída no log de execução.

Sessão começou em 2010-03-27 16:17:14 -0700.] 2010-03-27 16: 17: 18.831 ModelTouchCancel [2594: 207] Touchesbegan 2010-03-27 16: 17: 19.485 ModelTouchCancel [2594: 207 ] TouchesMoved 2.000000 2010-03-27 16: 17: 19.504 ModelTouchCancel [2594: 207] TouchesMoved 4.000000 2010-03-27 16: 17: 19.523 ModelTouchCancel [2594: 207] TouchesMoved 16.000000 2010-03-27 16: 17: 19.5.5.5.1.5.EL.EL.EL. [2594: 207] TouchesMoved 26.000000 2010-03-27 16: 17: 19.596 ModelTouchcancel [2594: 207] Touchesmoved 68.000000 2010-03-27 16: 17: 19.624 ModelTouchCancel [2594: 207] Touchesmoved 85.00000000024 2010-000000000000000000000000000000000 17: 19.640 ModelTouchCancel [2594: 207] TouchesMoved 125.000000 2010-03-27 16: 17: 19.641 ModelTouchcancel [2594: 207] Mostrar modal

Alguma sugestão sobre como redefinir o estado de uma UIView quando seus eventos de toque são interrompidos por uma visão modal?

Foi útil?

Solução

Se você estiver controlando quando a visualização modal está sendo exibida, também pode enviar uma notificação ao mesmo tempo para dizer ao restante do seu aplicativo que eles devem redefinir a visualização movida?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top