2010-10-08 9 views
2

Bonjour Je voudrais réaliser en même temps des coins arrondis et un fond composé par un petit png (OPERATOR_VIEW_BACKGROUND_IMAGE). Mon objectif principal est de permettre à un concepteur de remplir l'arrière-plan d'une vue en insérant la bonne image dans les ressources du projet.colorWithPatternImage et setCornerRadius issue

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)]; 
[triggerView.layer setCornerRadius:borderRadius]; 
[triggerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]]];; 

Je ne sais pas pourquoi, mais triggerView lâche le réglage CornerRadius quand j'ajoute la dernière ligne. triggerView est un UIView construit avec un constructeur d'interface et modifié dans son superView viewDidLoad par programmation, avec le code ci-dessus.

Où est-ce que je me trompe?

EDIT: Je n'ai pas mentionné que si j'utilise un simple UIColor comme: [UIColor orangeColor] Cela fonctionne bien. Donc, c'est quelque chose lié à la chose patternImage.

EDIT: J'ai essayé aussi ce code, en travaillant sur l'arrière-plan de la couche de mon point de vue:

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)]; 
triggerView.backgroundColor = [UIColor clearColor]; 
UIImage *img = [UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]; 
triggerView.layer.backgroundColor = [UIColor colorWithPatternImage:img].CGColor; 
triggerView.layer.cornerRadius = radius; 
[img release]; 
[self.view addSubview:triggerView]; 

Maintenant je un fond transparent, mais les coins sont arrondis;

+0

Avez-vous essayé de changer les 2 dernières instructions? – kennytm

+0

oui rien ne change. :( – microspino

Répondre

1

Essayez de définir la propriété du contenu de la couche avec le CGImageRef de l'image:

triggerView.layer.contents = (id) [[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE] CGImage]; 

Vous pourriez avoir à alloc ou conserver le UIImage pour l'empêcher d'être autoreleased ...

+0

Non, cela ne fonctionne pas.Vous avez besoin de supprimer le crochet au début – microspino

+2

Oups merci pour le correctif! Cela fonctionne pour moi quand je crée un calque, définir son rayon de coin puis définir sa couleur de fond à clear et sa propriété masksToBounds à yes.J'en crée un autre avec l'image comme contenu et l'ajoute comme sous-couche pour obtenir l'effet – Ben

1

Avec iOS SDK 4.0 et 4.1, la méthode colorWithPatternImage a un bug qui montre une image mal ...
J'utilisé cette méthode et j'ai eu ce bug mais je pouvais résoudre en utilisant une autre méthode ...
Essayez d'utiliser la méthode de initWithPatternImageUIColor Classe:

UIColor *imageBg = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]]; 

Cela a beaucoup pour moi ...

Malheureusement, je jamais utilisé cornerRadius méthode et je ne sais pas une solution peut-être pour cet autre problème.

+0

J'ai utilisé initWithPatternImage avant colorWithPatternImage, ça ne marche pas et je préfère ce dernier à évitez d'ajouter un autre objet pour libérer avec alloc.Mais de toute façon THX – microspino

+0

Thx Matthew, j'ai eu un problème avec UIBezierPath et colorWithPatternImage.Initialisez le problème avec initWithPatternImage. – CedricSoubrie

4

OK, grâce au commentaire de Ben et ce Blog entry que j'ai trouvé cette solution:

[triggerView setFrame:CGRectMake(0, 0, ICONS_WIDTH, iconFrameHeight)]; 
triggerView.layer.masksToBounds = YES; 
triggerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:OPERATOR_VIEW_BACKGROUND_IMAGE]]; 
triggerView.layer.cornerRadius = radius; 
[self.view addSubview:triggerView]; 

Il semble que triggerView.layer.masksToBounds = YES; était la pièce manquante, mais je ne reste pas seul comprendre why triggerView.layer.cornerRadius = radius; ne suffisait pas.