Estoy buscando realizar una transformación de perspectiva en una UIView (como se ve en coverflow)
¿Alguien sabe si esto es posible?
He investigado el uso CALayer
y he revisado todos los podcasts de Core Animation del programador pragmático, pero todavía no tengo claro cómo crear este tipo de transformación en un iPhone.
Cualquier ayuda, punteros o fragmentos de código de ejemplo serán realmente apreciados.
ios
cocoa-touch
uiview
core-animation
calayer
Nick Cartwright
fuente
fuente
Respuestas:
Como dijo Ben, deberá trabajar con la
UIView's
capa, utilizando aCATransform3D
para realizar lalayer's
rotation
. El truco para que la perspectiva funcione, como se describe aquí , es acceder directamente a una de las matricescells
deCATransform3D
(m34). Las matemáticas de matriz nunca han sido lo mío, así que no puedo explicar exactamente por qué esto funciona, pero lo hace. Tendrá que establecer este valor en una fracción negativa para su transformación inicial, luego aplique las transformaciones de rotación de capa a eso. También debe poder hacer lo siguiente:C objetivo
Swift 5.0
que reconstruye la transformación de capa desde cero para cada rotación.
Puede encontrar un ejemplo completo de esto (con código) aquí , donde he implementado la rotación táctil y la escala en un par de
CALayers
, según un ejemplo de Bill Dudney. La última versión del programa, en la parte inferior de la página, implementa este tipo de operación en perspectiva. El código debe ser razonablemente simple de leer.La
sublayerTransform
referencia a la que hace referencia en su respuesta es una transformación que se aplica a las subcapas de suUIView's
CALayer
. Si no tienes subcapas, no te preocupes por eso. Utilizo sublayerTransform en mi ejemplo simplemente porque hay dosCALayers
contenidos dentro de la capa que estoy rotando.fuente
Solo puede usar transformaciones de Core Graphics (Quartz, solo 2D) aplicadas directamente a la propiedad de transformación de UIView. Para obtener los efectos en el flujo de cobertura, deberá usar CATransform3D, que se aplica en el espacio tridimensional y, por lo tanto, puede darle la vista en perspectiva que desea. Solo puede aplicar CATransform3Ds a capas, no a vistas, por lo que tendrá que cambiar a capas para esto.
Consulte la muestra "CovertFlow" que viene con Xcode. Es solo para Mac (es decir, no para iPhone), pero muchos de los conceptos se transfieren bien.
fuente
Para agregar a la respuesta de Brad y proporcionar un ejemplo concreto, tomo prestado de mi propia respuesta en otra publicación sobre un tema similar. En mi respuesta, creé un patio de juegos Swift simple que puedes descargar y jugar , donde demuestro cómo crear efectos de perspectiva de una UIView con una jerarquía simple de capas, y muestro diferentes resultados entre usar
transform
ysublayerTransform
. Echale un vistazo.Estas son algunas de las imágenes de la publicación:
fuente
Puede obtener un efecto de carrusel preciso con iCarousel SDK.
Puede obtener un efecto Cover Flow instantáneo en iOS utilizando la maravillosa y gratuita biblioteca iCarousel. Puede descargarlo desde https://github.com/nicklockwood/iCarousel y soltarlo en su proyecto Xcode con bastante facilidad agregando un encabezado de puente (está escrito en Objective-C).
Si no ha agregado el código Objective-C a un proyecto Swift antes, siga estos pasos:
Código de muestra Swift 3:
fuente