Em vez de criar duas UIImageViews
, parece lógico simplesmente alterar a image
visão de uma. Se eu fizer isso, existe uma forma de dissolver / desvanecer / dissolver entre as duas imagens em vez de uma troca instantânea?
ios
objective-c
swift
cocoa-touch
uiimageview
Josh Kahane
fonte
fonte
Respostas:
Edit: existe uma solução melhor em @algal abaixo .
Outra maneira de fazer isso é usar transições predefinidas do CAAnimation:
Consulte o projeto de exemplo View Transitions da Apple: https://developer.apple.com/library/content/samplecode/ViewTransitions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007411
fonte
Pode ser muito mais simples usar os novos
UIKit animation
métodos baseados em blocos .Suponha que o código a seguir esteja no controlador de exibição, e o UIImageView que você deseja dissolver é uma subvisão de self.view endereçável por meio da propriedade
self.imageView
Então, tudo o que você precisa é:Feito.
E para fazer isso no Swift, é assim:
Swift 3, 4 e 5
fonte
Para o Swift 3.0.1:
Referência: https://gist.github.com/licvido/bc22343cacfa3a8ccf88
fonte
Sim, o que você diz é absolutamente correto e é esse o caminho. Eu escrevi esse método e sempre o uso para desaparecer na minha imagem. Eu lido com
CALayer
isso. Você precisa importar o Core Animation para isso.Você pode fazer o oposto para desvanecer uma imagem. Depois que desaparece. Você acabou de removê-lo da superview (que é
UIImageView
).[imageView removeFromSuperview]
.fonte
Você também pode empacotar o recurso de desvanecimento em uma subclasse, para poder usá-lo como um UIImageView comum, como no exemplo a seguir:
Uma possível implementação a seguir.
Nota: a maneira como você realmente implementa o desvanecimento na
setImage:
função pode mudar e pode ser um dos outros excelentes exemplos descritos nas outras respostas a esta pergunta - criando um adicional imediato,UIImageView
como eu estou fazendo aqui. ser uma sobrecarga inaceitável na sua situação específica .IMMFadeImageView.h :
IMMFadeImageView.m :
O código acima baseia-se em algumas suposições (incluindo a ativação do ARC no seu projeto XCode), destina-se apenas como uma prova de conceito e, por questões de clareza e foco, permanece relevante ao omitir códigos não relacionados importantes. Por favor, não copie e cole cegamente.
fonte
Eu precisava que a transição se repetisse indefinidamente. Foram necessárias muitas tentativas e erros para este, mas finalmente consegui o resultado final que estava procurando. Esses são trechos de código para adicionar animação de imagem a um UIImageView em um UITableViewCell.
Aqui está o código relevante:
fonte
Depois de brincar
UIView.transition()
e ter problemas com a.transitionCrossDissolve
opção (eu estava tentando animar as imagens que mudam dentro de um UIImageView e a transição ocorreu instantaneamente sem animação), descobri que você só precisa adicionar mais uma opção, que permite animar as propriedades que mudam dentro da exibição ( Swift 4.2 ):Além disso: se você tiver subviews no imageView, ele também será redesenhado e poderá impedir a animação. Por exemplo, eu tive uma subvisão com desfoque no meu imageView e, nesse caso, a animação não funciona. Então, mudei minha hierarquia de vistas e movi o desfoque para sua própria vista e a coloquei sobre o imageView.
fonte
Esta é a maneira mais curta de fazê-lo. Crie uma animação UIView e confirme no seu imageView.
fonte
Usando a
highlightedImage
propriedade, isso pode ser um pouco mais simples. Aqui está um exemplo no Swift 3. Primeiro, defina a imagem normal e a destacada:E quando você quiser alternar entre os animados:
fonte