139 votes

Comment dessiner une UIView personnalisée qui n'est qu'un cercle - application iPhone

Comment puis-je dessiner un UIView personnalisé qui n'est littéralement qu'une boule (un cercle en 2D) ? Est-ce que je dois simplement surcharger la méthode drawRect ? Et quelqu'un peut-il me montrer le code pour dessiner un cercle bleu ?

De même, serait-il possible de modifier le cadre de cette vue dans la classe elle-même ? Ou dois-je modifier le cadre à partir d'une autre classe ?

(j'essaie juste de mettre en place une balle qui rebondit)

15voto

Vyacheslav Points 2149

Swift 3 classe :

import UIKit

class CircleView: UIView {

    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else {return}

        context.addEllipse(in: rect)
        context.setFillColor(UIColor.blue.cgColor)
        context.fillPath()
    }           
}

6voto

matrix3003 Points 41

Une autre façon d'aborder le dessin de cercles (et d'autres formes) est d'utiliser des masques. Vous dessinez des cercles ou d'autres formes en commençant par créer des masques des formes dont vous avez besoin, puis en créant des carrés de votre couleur et, enfin, en appliquant des masques à ces carrés de couleur. Vous pouvez changer le masque ou la couleur pour obtenir un nouveau cercle ou une autre forme personnalisée.

#import <QuartzCore/QuartzCore.h>

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *area1;
@property (weak, nonatomic) IBOutlet UIView *area2;
@property (weak, nonatomic) IBOutlet UIView *area3;
@property (weak, nonatomic) IBOutlet UIView *area4;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.area1.backgroundColor = [UIColor blueColor];
    [self useMaskFor: self.area1];

    self.area2.backgroundColor = [UIColor orangeColor];
    [self useMaskFor: self.area2];

    self.area3.backgroundColor = [UIColor colorWithRed: 1.0 green: 0.0 blue: 0.5 alpha:1.0];
    [self useMaskFor: self.area3];

    self.area4.backgroundColor = [UIColor colorWithRed: 1.0 green: 0.0 blue: 0.5 alpha:0.5];
    [self useMaskFor: self.area4];        
}

- (void)useMaskFor: (UIView *)colorArea {        
    CALayer *maskLayer = [CALayer layer];
    maskLayer.frame = colorArea.bounds;
    UIImage *maskImage = [UIImage imageNamed:@"cirMask.png"];
    maskLayer.contents = (__bridge id)maskImage.CGImage;
    colorArea.layer.mask = maskLayer;
}

@end

Voici le résultat du code ci-dessus :

four circles

2voto

user8675 Points 621

Il existe une autre alternative pour les paresseux. Vous pouvez définir le layer.cornerRadius chemin clé pour votre vue dans le Constructeur d'interface . Par exemple, si votre vue a un largeur = hauteur de 48 ensemble layer.cornerRadius = 24 :

enter image description here

Cependant, cela ne fonctionne que si la taille de la vue est statique. (width/height is fixed) et le cercle ne s'affiche pas dans le constructeur d'interface.

1voto

RaziPour1993 Points 1505

Swift 3 - Xcode 8.1

@IBOutlet weak var myView: UIView!

override func viewDidLoad() {
    super.viewDidLoad() 

    let size:CGFloat = 35.0
    myView.bounds = CGRect(x: 0, y: 0, width: size, height: size)
    myView.layer.cornerRadius = size / 2
    myView.layer.borderWidth = 1
    myView.layer.borderColor = UIColor.Gray.cgColor        
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X