¿Cómo creó Apple Music la sombra de la obra de arte de una canción?

iOS puede generar sombras dinámicamente para cualquier UIView, y estas sombras se ajustan automáticamente para adaptarse a la forma del elemento en cuestión, incluso siguiendo las curvas de texto dentro de un UILabel. Esta funcionalidad está integrada, por lo que todo lo que necesita hacer es configurar sus propiedades, y hay cuatro cosas que debe tener en cuenta:

shadowColor establece el color de la sombra y debe ser un CGColor.

shadowOpacity establece cuán transparente es la sombra, donde 0 es invisible y 1 es lo más fuerte posible.

shadowOffset establece qué tan lejos de la vista debe estar la sombra, para dar un efecto de compensación 3D.

shadowRadius establece qué tan ancha debe ser la sombra.

Aquí hay un ejemplo simple para comenzar:

yourView.layer.shadowColor = UIColor.black.cgColor

yourView.layer.shadowOpacity = 1

yourView.layer.shadowOffset = CGSize.zero

yourView.layer.shadowRadius = 10

Generar sombras dinámicamente es costoso, porque iOS tiene que dibujar la sombra alrededor de la forma exacta del contenido de su vista. Si puede, establezca la propiedad shadowPath en un valor específico para que iOS no necesite calcular la transparencia dinámicamente. Por ejemplo, esto crea una ruta de sombra equivalente al marco de la vista:

yourView.layer.shadowPath = UIBezierPath (rect: yourView.bounds) .cgPath

Alternativamente, solicite a iOS que guarde en caché la sombra renderizada para que no sea necesario volver a dibujarla:

yourView.layer.shouldRasterize = true

Una revelación que podría ayudarte es esta: los ingenieros de Apple usan los mismos marcos que tú .

Es decir, con algunas diferencias específicas de dominio, como el acceso a sus canciones, las personas que escribieron la aplicación Apple Music usan aproximadamente el mismo SDK que las personas que escribieron la aplicación Spotify que las personas que escribieron la una vez magnífica aplicación Llama o Duck. !!.

Probablemente no haya magia allí, solo gente brillante escribiendo código. ¡Igual que tú!

Específicamente, buscaría en UIVisualEffectView. Supongo que es un efecto UIBlurEffect con el estilo extraLight, luego lo escalan y lo colocan detrás de la obra de arte de opacidad completa.

Y luego están esos lindos bordes emplumados … Supongo que algún tipo de máscara en la capa. Puede usar una imagen, y el canal alfa (por ejemplo, la parte no transparente) enmascarará (o hará transparente) la capa subyacente.

El efecto no es una sombra, sino más bien un efecto de luz ambiental, como los que se ven en un montón de televisores. La diferencia es que en lugar de que haya una fuente de luz externa que esté bloqueada por el objeto, creando así una sombra, el objeto en sí es una fuente de luz aquí, que emite una luz del mismo color que él.

Aquí hay un anuncio para un televisor Phillips que también hace esto.

Lograrlo en iOS no es tan complejo. Simplemente coloque una versión borrosa, ligeramente ampliada de la carátula del álbum debajo de la carátula del álbum en sí. Core Image contiene una variedad de desenfoques (CICategoryBlur – Core Image Filter Reference) entre los que puede elegir.

Apple usa la llamada API de Cocoa. Eso es esencialmente un conjunto de bibliotecas para programar las diferentes cosas.

Esa API obviamente viene con una biblioteca para manejar imágenes.

Simplemente colocan la imagen en su marcador de posición y agregan la sombra al contenedor de imágenes.

El código se vería así:

– (nulo) drawRect: (CGRect) myRect
{
Contexto CGContextRef = UIGraphicsGetCurrentContext ();
CGContextSetShadow (contexto, CGSizeMake (5.0f, 5.0f), 5.0f);
[myImage drawAtPoint: CGPointMake (50.0f, 50.0f)];
}

De esa manera parece que la sombra está en la imagen, pero en realidad la sombra es simplemente una superposición de rectángulo en el fondo

Hay una biblioteca en GitHub que realiza este tipo de efecto para usted: PierrePerrin / ShadowView

Como se ha cubierto en esta pregunta, no es una verdadera sombra en blanco y negro generada por Core Graphics o Core Animation. Es simplemente una copia de la imagen en primer plano que se ha oscurecido ligeramente y luego se ha vuelto borrosa, y luego se coloca detrás de la imagen original.