Shape

Shape SwiftUI

SwiftUI nos oferece algumas opções de Shapes para trabalhar inicialmente, que também costumam ser as formas mais utilizadas: Rectangle, Circle, Ellipse, Capsule, RoundedRectangle.

Diferente de Stacks, Shapes (ou Formas), são views que vão se expandir para ocupar o máximo de espaço disponível. Por isso, é comum o método .frame ser utilizado em conjunto com um Shape para que ele seja limitado a uma altura e largura determinada.

Rectangle

Desenha um retângulo com as dimensões especificadas, no centro da view que o contém. Outras views como Stacks e Colors começam como retângulos, mas não se engane, elas não são Shapes.

Circle

Desenha um círculo no centro da view que o contém, porém seu diâmetro corresponderá ao menor valor especificado entre altura e largura, por exemplo, se dado um espaço de 100x50, o círculo final terá apenas 50 de altura e 50 de largura.

Ellipse

Possui um comportamento similar ao Circle, porém não se limita a ter a altura e largura iguais.

Capsule

Cria um Shape em formato de cápsula que vai ter as pontas arredondadas, dependendo de qual eixo (altura ou largura) é maior.

RoundedRectangle

Cria um retângulo que possui os cantos arredondados. Possui dois parâmetros:

cornerRadius: Define o nível de arredondamento das bordas.

style: Define o estilo de arredondamento. Se vai ser o estilo clássico .circular ou o estilo definido pela Apple .continuous.

Customizando um Shape

Existem vários métodos que podem ser utilizados para customizar um Shape além do .frame, então seguem alguns dos mais usados e quais as suas finalidades:

  • .stroke(lineWidth:)

    Retorna um novo Shape que é uma cópia do anterior porém com uma borda de tamanho definido por lineWidth. As vezes pode extrapolar o limite da view por ser uma borda externa.

  • .strokeBorder(_, lineWidth:)

    Outra forma de adicionar borda a um Shape, porém com borda interna.

  • .fill()

    Permite preencher um Shape com uma cor ou gradiente.




Para demonstrar melhor como os Shapes funcionam, segue um exemplo:

Anterior
Anterior

Spacer