Coins arrondis UIView avec ombre
J'essaie d'afficher une UIView avec des coins ronds et avec une ombre portée. Mais le problème est que maskToBounds propriété ne fonctionne que pour le cas.
Si maskToBounds est OUI, alors les coins ronds montrer et quand NE puis l'ombre se montre. Ici est la mise en œuvre, mais il affiche uniquement les coins ronds sans l'ombre:
[self.view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]]];
self.view.layer.masksToBounds = YES;
self.view.layer.opaque = NO;
self.view.layer.cornerRadius = 15.0f;
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 5.0;
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
idées!
REMARQUE: j'ai lu et mis en place le code dans le fil de discussion suivant mais il ne fonctionne pas:
UIView avec des coins arrondis et de l'ombre portée?
Mise à JOUR 1:
J'ai essayé de créer deux vues distinctes. Représente le rayon et on va représenter l'ombre. Le problème est que se crée l'ombre sur le dessus du rayon de vue, comme indiqué dans la capture d'écran ci-dessous:
H
ere is the code:
self.view.layer.masksToBounds = YES;
self.view.layer.opaque = NO;
self.view.layer.cornerRadius = 15.0f;
//self.view.backgroundColor = [UIColor clearColor];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]];
//
UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
shadowView.layer.shadowColor = [UIColor blackColor].CGColor;
shadowView.layer.shadowRadius = 2.0;
shadowView.backgroundColor = [UIColor clearColor];
shadowView.layer.shadowOffset = CGSizeMake(3.0, 3.0);
shadowView.layer.shadowOpacity = 0.9f;
shadowView.layer.shadowPath = [UIBezierPath
bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[self.view addSubview:shadowView];
Mise à JOUR 2:
Inversé ne fonctionne toujours pas. Pas de coins arrondis sont créés.
UIView *roundCornerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
roundCornerView.layer.masksToBounds = YES;
roundCornerView.layer.opaque = NO;
roundCornerView.layer.cornerRadius = 15.0f;
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 2.0;
//self.view.backgroundColor = [UIColor clearColor];
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
self.view.layer.shadowPath = [UIBezierPath
bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[self.view addSubview:roundCornerView];
SOLUTION:
UIView *roundCornerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
roundCornerView.layer.masksToBounds = YES;
roundCornerView.layer.opaque = NO;
roundCornerView.layer.cornerRadius = 15.0f;
roundCornerView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue_gradient.jpeg"]];
self.view.layer.shadowColor = [UIColor blackColor].CGColor;
self.view.layer.shadowRadius = 2.0;
self.view.backgroundColor = [UIColor clearColor];
self.view.layer.shadowOffset = CGSizeMake(3.0, 3.0);
self.view.layer.shadowOpacity = 0.9f;
//self.view.layer.shadowPath = [UIBezierPath
// bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[self.view addSubview:roundCornerView];
source d'informationauteur azamsharp
Vous devez vous connecter pour publier un commentaire.
Créer deux points de vue.
l'un avec l'ombre portée (et n'oubliez pas de mettre le shadowPath)
dans laquelle vous ajoutez un sous-vue avec
cornerRadius
etmaskToBounds
.Accepté la réponse n'a pas à contenir tout le code, voici donc un exemple de Swift (Voir la question d'origine pour l'OP de la solution en Obj-C).
Comme la accepté de répondre, cette solution utilise des vues distinctes pour l'ombre et le rayon de l'angle.
Ma réponse est ici.