Como adiciono uma borda de linha tracejada ao redor UIView
.
Algo assim
ios
objective-c
iphone
uiview
Sohaib
fonte
fonte
Respostas:
Você pode definir a borda com esse padrão usando o caminho Camada e Bezier, como nos exemplos abaixo.
Objetivo-C
Swift 3.1
Você também pode definir diferentes tipos de design usando a imagem padrão, como no exemplo abaixo.
Aqui você deve adicionar uma
<QuartzCore/QuartzCore>
estrutura ao projeto e importá-la com a linha abaixo doYourViewController.m
arquivo.fonte
Outro método, se você gosta de subcamadas. No init da sua visualização personalizada, coloque isto (_border é um ivar):
E nas suas visualizações de layouts, coloque o seguinte:
fonte
_border.path = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:5.f].CGPath;
_border.lineWidth = 3
border = CAShapeLayer() border.strokeColor = yourColor border.fillColor = nil border.lineDashPattern = [4, 2] self.layer.addSublayer(border)
Para aqueles que trabalham no Swift, essa extensão de classe no UIView facilita. Isso foi baseado na resposta de sunshineDev.
Para usá-lo:
fonte
addDashedBorder()
durante o processo dedidMoveToSuperview()
conclusão do autolay e o tamanho do quadro estaria correto, mas não estava. A largura da borda tracejada vai além da largura da vista. A linha tracejada parece tão boa por sinal! Oself.frame.size
não está correto.Swift 3 :
Use em um storyboard (como classe personalizada) ou diretamente no código:
Resultado:
fonte
Com base no que o Prasad G sugeriu, criei um método dentro de uma classe UIImage Extras com o seguinte:
É importante ressaltar que, se você definir a posição da sua forma como (0,0), o canto inferior da borda será colocado no centro da imagem, por isso eu a defino como: (frameSize.width / 2, frameSize .height / 2)
Em seguida, uso meu método para obter a borda tracejada usando a UIImage do meu UIImageView e adiciono o CAShapeLayer como uma subcamada da camada UIImageView:
fonte
Use o método CGContextSetLineDash ().
Eu acho que será útil para você.
fonte
Aqui está uma subclasse UIView que pode funcionar para qualquer projeto, mas também para visualizações redondas :
Dessa forma, você pode editar a partir do Storyboard da seguinte maneira:
Um par de resultados:
fonte
Para isso, você precisa adicionar CAShapeLayer para esse objeto específico
fonte
Swift 4.2
Baseado na resposta da rmooney como uma
UIView
extensão com parâmetros configuráveis com valores padrão definidos.fonte
shapeLayer.lineJoin = CAShapeLayerLineJoin.round
deve seryourViewBorder.lineJoin = kCALineJoinRound
Versão rápida da resposta do QuartzCore.
A
CAShapeLayer
abordagem funciona, mas a abordagem QuartzCore é melhor para lidar com uma recarga do Table View, seUIView
estiver dentro de uma célula.Para a imagem, você pode usar algo assim (é muito pequeno):
Eu costumo preferir vetor sobre PNGs quando posso me safar:
Images.xcassets
, crie umNew Image Set
chamado dottedPatternScale Factors
paraSingle Vector
fonte
Para borda pontilhada / pontilhada do Xamarin.iOS.
fonte
Em Swift 3
fonte
Isto é, se você quisesse no Swift 2
fonte
tente o código abaixo
para alguém como abaixo
fonte
Para Swift 5
Como adicionar
Como remover borda novamente
fonte
Acabei criando um IB Designable usando algumas das implementações do @Chris:
CurvedDashedBorderUIVIew.h:
CurvedDashedBorderUIVIew.m:
em seguida, basta configurá-lo no xib / storyboard:
fonte
Solução rápida com classe personalizada trabalhada com autolayout
personalizado a partir de @Iain Smith
fonte
Você pode simplesmente criar uma classe IBDesignable como esta:
Depois, basta subclassificar sua visualização com o BorderedView do Xcode. Dessa forma, você pode definir a cor e a largura da borda com muita facilidade a partir do construtor de interfaces!
fonte
} e chame esta função em viewdidLoad () com atraso:
fonte
• Swift 5
• Funciona com autolayout
• Funciona com o raio do canto
fonte
No swift 4, criei uma extensão UIView com a seguinte função:
fonte
Se você deseja que isso funcione com o cornerRadius, tente este
fonte
Swift 5+
Como usar:
fonte