Estou procurando executar uma transformação de perspectiva em um UIView (como visto no coverflow)
Alguém sabe se isso é possível?
Eu investiguei o uso CALayer
e percorri todos os podcasts do programador pragmático Core Animation, mas ainda não sou mais claro como criar esse tipo de transformação em um iPhone.
Qualquer ajuda, ponteiros ou trechos de código de exemplo seriam realmente apreciados!
ios
cocoa-touch
uiview
core-animation
calayer
Nick Cartwright
fonte
fonte
Respostas:
Como Ben disse, você precisará trabalhar com a
UIView's
camada, usando aCATransform3D
para executar alayer's
rotation
. O truque para fazer funcionar a perspectiva, como descrito aqui , é acessar diretamente uma das matrizescells
daCATransform3D
(m34). A matemática matricial nunca foi minha coisa, então não posso explicar exatamente por que isso funciona, mas funciona. Você precisará definir esse valor como uma fração negativa para sua transformação inicial e aplicar as transformações de rotação da camada a isso. Você também deve poder fazer o seguinte:Objetivo-C
Swift 5.0
que reconstrói a transformação da camada do zero para cada rotação.
Um exemplo completo disso (com código) pode ser encontrado aqui , onde eu implementei a rotação e o dimensionamento baseados em toque em alguns
CALayers
, com base em um exemplo de Bill Dudney. A versão mais recente do programa, na parte inferior da página, implementa esse tipo de operação em perspectiva. O código deve ser razoavelmente simples de ler.A que
sublayerTransform
você se refere na sua resposta é uma transformação aplicada às subcamadas da suaUIView's
CALayer
. Se você não possui subcamadas, não se preocupe. Eu uso o sublayerTransform no meu exemplo, simplesmente porque existem doisCALayers
contidos na camada que estou girando.fonte
Você pode usar apenas transformações de gráficos principais (quartzo, somente 2D) aplicadas diretamente à propriedade de transformação de um UIView. Para obter os efeitos no coverflow, você precisará usar o CATransform3D, que é aplicado no espaço 3D, e assim fornecer a vista em perspectiva desejada. Você só pode aplicar o CATransform3Ds em camadas, não em vistas, portanto, será necessário mudar para camadas para isso.
Confira o exemplo "CovertFlow" que acompanha o Xcode. É somente para mac (ou seja, não para iPhone), mas muitos conceitos são bem transferidos.
fonte
Para adicionar à resposta de Brad e fornecer um exemplo concreto, empresto minha própria resposta em outro post sobre um tópico semelhante. Na minha resposta, criei um playground Swift simples com o qual você pode baixar e brincar , onde demonstro como criar efeitos de perspectiva de um UIView com uma hierarquia simples de camadas e mostro resultados diferentes entre usar
transform
esublayerTransform
. Confira.Aqui estão algumas das imagens do post:
fonte
Você pode obter um efeito preciso do carrossel usando o iCarousel SDK.
Você pode obter um efeito instantâneo do Cover Flow no iOS usando a maravilhosa e gratuita biblioteca iCarousel. Você pode baixá-lo em https://github.com/nicklockwood/iCarousel e soltá-lo em seu projeto Xcode com bastante facilidade, adicionando um cabeçalho de ponte (escrito em Objective-C).
Se você não adicionou o código Objective-C a um projeto Swift antes, siga estas etapas:
Código de exemplo do Swift 3:
fonte