Pergunta

Eu tenho um botão personalizado em um controlador de visualização de navegação do controlador de hierarquia, que, quando pressionado, aparece o visível do controlador de visualização.

Eu quero usar a uiview do transform propriedade para animar o encerramento do controlador de visualização.Ele funciona, mas se eu usar `popViewControllerAnimated:SIM', o padrão da esquerda slide da animação ainda está lá, embora a minha transformação personalizada também funciona.

Se eu definir popViewControllerAnimated:NO ele não se animar com nada.

Eu também olhei para o uso de CATransition que funciona quando eu popViewControllerAnimated conjunto para NO, mas não há um "zoom" efeito que faz parte da API pública, e eu não quero usar a privada efeito.Filtros personalizados também não estão disponíveis para o iPhone, apenas OS X.

Então eu acho que minhas perguntas são:

1) existe uma maneira de remover a esquerda slide no padrão de transição, mas ainda tem uma animação personalizada usando transform?

2) de Alguma forma para utilizar um filtro personalizado para CATransition?

3) Se eu usar uma API privada para o efeito de zoom, qual a probabilidade de a Apple lançar a minha app no rejeição bin?

Alguém tem uma solução que eu estou vista?

Foi útil?

Solução

Eu fiz algo semelhante ao que você descreve, por exemplo,alterar o padrão de animação para o pop e push de vista em UINavigationController.

A ideia é desabilitar o padrão de animação para o objeto e substituí-lo com sua própria animação.Eu criei uma nova categoria para UINavigationController e utilizada uma função semelhante à abaixo.

 - (void) altAnimatePopViewControllerAnimated:(BOOL)animated
 {
[CATransaction begin];

CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush;          // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;

CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;


[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];



[self  popViewControllerAnimated:YES];
[CATransaction commit];
   }

para usar basta usar o código

   [self.navigationController altAnimatePopViewControllerAnimated:YES];

A fim de fazer um push, apenas criar outro tipo de função inversa e a animação.

Ele não é perfeito, mas funciona.Quando você escolher diferentes tipos de animação brincar com as diferentes subviews compor a barra de navegação/controlador para ficar perfeito.

Levei o meu muito branco de vir com isso, para usá-lo sabiamente :)

******* EDITAR

Tente substituir o impulso de transição com isso (não tente isso sozinho):

  CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
  scale.duration = duration;
  scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
              [NSNumber numberWithFloat:1.2f],
              [NSNumber numberWithFloat:.85f],
              [NSNumber numberWithFloat:1.f],
              nil];

Isso vai fazer um pop, i.é.a exibição será maior, antes que ele se instale para o tamanho certo.Jogar com os valores na matriz para controlar a curva de animação.

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