Meu objetivo simples é desvanecer animadas funções de ocultação e exibição.
Button.hidden = YES;
Simples o suficiente. No entanto, é possível que ele desapareça em vez de apenas desaparecer? Parece pouco profissional dessa maneira.
fonte
Meu objetivo simples é desvanecer animadas funções de ocultação e exibição.
Button.hidden = YES;
Simples o suficiente. No entanto, é possível que ele desapareça em vez de apenas desaparecer? Parece pouco profissional dessa maneira.
No iOS 4 e posterior, há uma maneira de fazer isso usando o método de transição UIView sem precisar importar o QuartzCore. Você pode apenas dizer:
[UIView transitionWithView:button
duration:0.4
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
button.hidden = YES;
}
completion:NULL];
UIView.transition(with: button, duration: 0.4,
options: .transitionCrossDissolve,
animations: {
button.hidden = false
})
A solução de Michail funcionará, mas na verdade não é a melhor abordagem.
O problema do desbotamento alfa é que, às vezes, as diferentes camadas de exibição sobrepostas parecem estranhas à medida que desaparecem. Existem outras alternativas usando o Core Animation. Primeiro, inclua a estrutura QuartzCore no seu aplicativo e adicione#import <QuartzCore/QuartzCore.h>
ao seu cabeçalho. Agora você pode executar um dos seguintes procedimentos:
1) conjunto button.layer.shouldRasterize = YES;
e use o código de animação alfa que Michail forneceu em sua resposta. Isso impedirá que as camadas se misturem estranhamente, mas tem uma pequena penalidade de desempenho e pode fazer com que o botão fique embaçado se não estiver alinhado exatamente no limite de um pixel.
Alternativamente:
2) Use o seguinte código para animar o desbotamento:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];
button.hidden = YES;
O ponto positivo dessa abordagem é que você pode fazer o crossfade de qualquer propriedade do botão, mesmo que eles não sejam animáveis (por exemplo, o texto ou a imagem do botão), basta configurar a transição e definir suas propriedades imediatamente depois.
transitionWithView
parâmetro para garantir o sucesso do desvanecimento.As propriedades animadas do UIView são:
isHidden
não é um deles, então a meu ver a melhor maneira é:Swift 4:
Objetivo C:
fonte
Para desaparecer:
Objetivo-C
Swift 2
Swift 3, 4, 5
Para desaparecer:
Objetivo-C
Swift 2
Swift 3, 4, 5
fonte
Eu uso esta pequena extensão Swift 3 :
fonte
Swift 3
fonte
swift 4.2
com extensão:
método simples:
fonte
Use esta solução para obter efeitos suaves de fadeOut e fadeIn
uso é como
obrigado
fonte
fadeOut
funciona no iOS 13 somente se eu remover as linhas definidasself.isHidden
.Eu criei categoria
UIView
para esta finalidade e implementou um pouco especial mordeu conceito diferente:visibility
. A principal diferença da minha solução é que você pode ligar[view setVisible:NO animated:YES]
e logo depois verificar[view visible]
e obter o resultado correto. Isso é bastante simples, mas extremamente útil.Além disso, é permitido evitar o uso de "lógica booleana negativa" (consulte Código completo, página 269, Use nomes de variáveis booleanas positivas para obter mais informações).
Rápido
UIView+Visibility.swift
Objetivo-C
UIView+Visibility.h
UIView+Visibility.m
fonte
o código de @Umair Afzal funcionando bem no swift 5 após algumas alterações
para uso
fonte
Swift 4
E para usá-lo, chame essas funções como:
fonte
isHidden
é um valor imediato e você não pode afetar uma animação, em vez disso, use Alpha para ocultar sua visualizaçãoE para mostrar:
fonte
Você pode fazer isso MUITO facilmente usando a biblioteca do Animatics :
fonte
fonte
Você pode tentar isso.
E passe seu nome de exibição
fonte
Se sua visualização estiver oculta por padrão ou se você alterar o estado Oculto, o que eu acho que deveria em muitos casos, nenhuma das abordagens nesta página fornecerá a animação FadeIn / FadeOut, mas sim apenas um desses estados, o motivo é que você está definindo o estado Oculto como false antes de chamar o método UIView.animate , que causará uma visibilidade repentina e, se você animar apenas o alfa, o espaço do objeto ainda está lá, mas não é visível, o que resultará em alguns problemas da interface do usuário.
Portanto, a melhor abordagem é verificar primeiro se a visualização está oculta e, em seguida, defina o alfa como 0,0, assim, quando você definir o estado Oculto como falso, não verá uma visibilidade repentina.
fonte
A função UIView.transition (with :) é agradável e arrumada.
Muitos o publicaram, mas ninguém notou que existe uma falha que será exibida apenas quando você o executar.
É possível fazer a transição perfeita da propriedade oculta para true, enquanto que quando você tenta fazer a transição para false, a visualização desaparece subitamente sem nenhuma animação.
Isso ocorre porque essa API funciona apenas dentro de uma visualização, o que significa que quando você faz a transição de uma visualização para mostrar, na verdade ela mostra imediatamente, apenas o conteúdo animado gradualmente.
Quando você tenta ocultar essa exibição, ela se oculta imediatamente, torna a animação do seu conteúdo sem sentido.
Para resolver isso, ao ocultar uma visualização, o destino da transição deve ser a visualização pai, em vez da visualização que você deseja ocultar.
fonte
Minha solução para o Swift 3 . Então, eu criei a função que oculta / mostra a exibição na ordem correta (ao ocultar - defina alpha como 0 e depois é Hidden para true; unhiding - revele a exibição e defina alpha como 1):
fonte
completion
bloco há outra animação quandohide
é falsa?Transição Swift 4
Se você usar a abordagem para versões rápidas mais antigas, receberá um erro:
Referência útil .
fonte
isHidden
valor é renderizado instantaneamente (ou seja, ocultando / exibindo instantaneamente).fonte
Tentei algumas das respostas apresentadas, algumas funcionam apenas para uma situação, algumas precisam adicionar duas funções.
Opção 1
Nada a ver com isso
view.isHidden
.Então passe
isFadeIn
(true
oufalse
)opção 2
Não passe nenhum parâmetro. Ele desaparece ou desaparece de acordo com
isUserInteractionEnabled
. Isso também se adapta muito bem à situação animada.Então você liga
É isso aí. Custou-me um dia, espero que ajude alguém.
fonte