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.

Foi útil?

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
    }
}

enter image description here

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:

enter image description here

Definir Clip to Bounds para verdadeiro (ou a foto se estenderá além do círculo):

enter image description here

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!

enter image description here

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top