Pergunta

Eu tenho um único UIView para tirar qualquer um de um conjunto de itens. Isto é, o meu subclasse UIView pode ser dito para desenhar um quadrado, círculo ou triângulo, por exemplo.

Eu gostaria de ter uma transição para virar essa visão para que o UIView desenha uma forma diferente no ponto a meio caminho, por isso parece que estou a transição para uma visão diferente, mas realmente estou apenas redesenhar a visão única no ponto a meio caminho da transição.

Existe uma maneira de fazer isso, sem recorrer ao uso de dois UIViews diferentes e trocando-os no bloco de animação? Seria um desajeitado pouco para mim de adaptar o que eu tenho que usar o mecanismo de swap.

O ideal é toda a necessidade I é algum retorno ou notificação que a animação está no ponto a meio caminho, e então eu posso redesenhar a vista com a nova forma seguida.

Obrigado por qualquer ajuda!

Foi útil?

Solução

Mesmo se você sabia o ponto médio de sua animação flip, eu não acredito que redesenhar o conteúdo da vista meados de animação faria qualquer coisa. Eu acho que o conteúdo da camada da vista são armazenados em cache no início da animação e não mudam como a animação continua. Além disso, sua visão iria acabar invertido, esquerda para a direita, no final da animação, se você não tem outra visão por trás dele.

Se você quiser fazer isso como uma animação personalizada, você pode quebrar este em duas metades usando algo como Mike Lee de Lemur implementação Virar que eu descrevo em esta resposta . Após a primeira metade da animação, você pode redesenhar o conteúdo da vista e completar a animação, terminando de volta onde você começou.

No entanto, parece-me mais desajeitado para não mudar as vistas em resposta à transição. Ele certamente vai demorar muito mais código para fazer.

Outras dicas

Você pode tentar fazer smth assim. Por exemplo, sua propriedade animationDuration está definido para 2.0F. assim, a meio caminho ponto é de 1 segundo, assim você pode usar

[auto performSelector: @selector (yourCallbackMethod) withObject: nil afterDelay: 1.0f];

A única maneira que eu conheço que você poderia fazer isso é recriar a animação usando Core Animation e, em seguida, monitorar a animação na camada de apresentação usando um timer. Não há KVO disponível em Camadas Core Animation então você tem que monitorá-lo explicitamente.

Em outras palavras, não é provavelmente vale a pena. Eu sugiro que você pense em uma maneira diferente de resolver o seu problema.

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