Como fazer uma UIView circular
-
18-09-2019 - |
Pergunta
Eu quero fazer um UIVIEW ou UIImageView que é um círculo. Ou um círculo que eu possa alterar o tamanho do uso de um controle deslizante e a cor com um Pickerview.
Solução
Posso pelo menos mostrar um atalho para desenhar círculos de tamanho arbitrário. Não é necessário o OpenGL, não é necessário desenhar gráficos.
Importar a estrutura do quartzcore para obter acesso ao .raio de canto Propriedade do seu UIView ou UIImageView.
#import <QuartzCore/QuartzCore.h>
Além disso, adicione -o manualmente à pasta Frameworks do seu projeto.
Adicione este método ao seu controlador de exibição ou onde você precisar:
-(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize;
{
CGPoint saveCenter = roundedView.center;
CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize);
roundedView.frame = newFrame;
roundedView.layer.cornerRadius = newSize / 2.0;
roundedView.center = saveCenter;
}
Para usá -lo, basta passar um UIImageView e um diâmetro. Este exemplo pressupõe que você tenha um UIImageView chamado "Circ" adicionado como uma subview ao seu Visão. Deve ter um cor de fundo Conjunto para que você possa ver.
circ.clipsToBounds = YES;
[self setRoundedView:circ toDiameter:100.0];
Isso apenas lida UIImageViews Mas você pode generalizá -lo para qualquer Uiview.
NOTA: Desde o iOS 7, o CliptoBounds precisa sim.
Outras dicas
// For those looking to round the corners of an image view
imageView.layer.cornerRadius = imageView.bounds.size.width/2;
imageView.layer.masksToBounds = YES;
Se alguém estiver procurando por Swift equivalente a abaixo é a resposta (xcode7.2):
(Para que isso funcione a altura e a largura deve ser igual.)
extension UIView {
func makeCircular() {
self.layer.cornerRadius = min(self.frame.size.height, self.frame.size.width) / 2.0
self.clipsToBounds = true
}
}
Não há necessidade de chamadas gráficas. Basta definir o raio do canto para a largura / 2. Isso pode ser feito em qualquer objeto visual, ou seja, UI
elemento
Como mencionado em alguns comentários, o @IbDesignable facilita muito isso agora, para que você possa usar o interface Builder para configurar seu UIImageView arredondado.
Primeiro crie uma classe chamada RoundedImageView.swift
e cole este código para ele:
import UIKit
@IBDesignable public class RoundedImageView: UIImageView {
override public func layoutSubviews() {
super.layoutSubviews()
//hard-coded this since it's always round
layer.cornerRadius = 0.5 * bounds.size.width
}
}
Selecione o UIImageView no InterfaceBuilder e altere a classe do UIImageView para o RoundEdImageView personalizado:
Definir Clip to Bounds
para verdadeiro (ou a foto se estenderá além do círculo):
Agora deve se arredondar bem no InterfaceBuilder, o que é bastante bacana. Certifique -se de definir a largura e a altura para os mesmos valores ou terá a forma de um zeppelin!
Você precisa fazer um UIView transparente (alfa de cor de fundo de 0) e, em seguida, em seu drawrect:, desenhe seu círculo usando chamadas CoreGraphics. Você também pode editar a camada da vista e dar um Cornerradius.