2017-05-19 4 views
1

Je travaille sur une application Mac et j'ai besoin d'un NSView personnalisé avec 4 coins arrondis. Tout ce que j'ai essayé ne produit aucun résultat, ou courbe seulement les deux bords du NSView. Y at-il un moyen de courbe tous les 4 coins d'un NSView?NSView - courbe setCornerRadius tous les 4 coins

J'ai essayé de créer une classe personnalisée et j'ai utilisé la méthode initWithFrame qui ne donne aucun résultat. J'ai ensuite essayé la méthode drawRect qui courbes les deux angles seulement botton:

-(void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 

    [self setWantsLayer:YES]; 
    [self.layer setFrame:self.frame]; 
    [self.layer setMasksToBounds:YES]; 
    [self.layer setCornerRadius:10.0f]; 
} 

Comment puis-je courbe les quatre coins? Et est-ce que quelqu'un sait pourquoi développer pour le Mac est tellement plus difficile que sur iOS. Pourquoi même la tâche la plus basique nécessite-t-elle toujours une classe personnalisée (à savoir: définir la couleur d'arrière-plan NSView ou exécuter l'équivalent d'un UIViewAnimation ....).

Merci pour votre temps, Dan.

Répondre

3

Ces trois lignes me donnent des coins arrondis et fond rouge pour le testView de type NSView lié comme une sortie de story-board en viewDidLoad d'un ViewController, pas subclassing nécessaire:

_testView.wantsLayer = YES; 
_testView.layer.backgroundColor = [NSColor redColor].CGColor; 
_testView.layer.cornerRadius = 10.; 

Modifier

Tous les coins n'étaient pas arrondis à cause de cette ligne:

[self.layer setFrame:self.frame]; 

Fondamentalement, vous n'avez pas besoin, vous définissez cadre de la couche appropriée avec cette ligne:

[self setWantsLayer:YES]; 

Si vous souhaitez définir trame de couche explicite, vous souhaitez utiliser

[self.layer setFrame:self.bounds]; 

Lisez à propos de la différence entre frame et bounds. Et le code susmentionné fonctionne également en drawRect:.

+0

Je vois merci. Cela a fonctionné pour moi, je ne sais pas pourquoi la sous-classification n'a pas fonctionné. Oh bien merci quand même. – Supertecnoboff

+1

@Supertecnoboff voir ma notice modifiée – schmidt9