2011-05-18 1 views
0

Dans un de mes affichages, j'ajoute une ombre à une vue. La chose est que l'ombre montre des espaces blancs sur les bords droits. Je veux supprimer ces espaces.Problème lors de l'ajout d'une ombre pour afficher le calque

Voici mon code:

UIView *myView = [[ISTView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 35)]; 
myView.backgroundColor = [UIColor greyColor]; 
[myView.layer setShadowOffset:CGSizeMake(0.0, 5.0)]; 
[myView.layer setShadowOpacity:0.8]; 
[myView.layer setShadowRadius:2.0]; 
[myView.layer setShadowColor:[UIColor blackColor].CGColor]; 
[self.view addSubview:myView]; 
[myView release]; 

Voici mon avis de o/p:

enter image description here

+0

Êtes-vous parler du fait que l'ombre, sur la surface ci-dessous, apparaît plus petite que l'objet dont il est coulé? I.e., la perspective? –

+0

@Abnihav, avez-vous essayé d'augmenter shadowRadius? – Zapko

+0

@Josh: C'est correct. – Abhinav

Répondre

2

Si vous voulez ombre homogène sans effets secondaires, vous pouvez dessiner dans l'éditeur graphique, sauf pour .png et lieu UIImageView avec l'image étirable sur votre point de vue. Et n'oubliez pas de définir clipToBounds sur NO.

UIView *myView = [[ISTView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 35)]; 
myView.backgroundColor = [UIColor greyColor]; 
myView.clipToBounds = NO; 

UIImageView *shadowView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 35, 320, 10)]; 
shadowView.image = [UIImage imageWithName:@"my-shadow.png"]; 
[myView addSubview:shadowView]; 
[shadowView release]; 

[self.view addSubview:myView]; 
[myView release]; 

Il serait moins coûteux pour le système de dessiner une image existante en cache au-dessus de la hiérarchie des vues que de calculer l'ombre de la couche.

0

Une solution que je pouvais penser et travaille également pour ajuster le cadre de la vue par 2 pixels dans la position X et la largeur:

UIView *myView = [[ISTView alloc] initWithFrame:CGRectMake(-2.0, 0.0, 324.0, 35)]; 

Mais ceci est pas une approche plus propre de le faire. Si quelqu'un a une meilleure solution, s'il vous plaît guider.

1

Utilisez Shadowpath pour faire de l'ombre plus grande alors la vue

view.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, view.frame.size.width+30, view.frame.size.height)].CGPath; 
+0

Cela fonctionne quand je place la position X négative (-2.0) et augmente la largeur de 4.0 pixels - La façon dont j'ai répondu dans ma réponse. – Abhinav

0

Essayez ceci, supprimer le code: [myView.layer setShadowRadius:2.0];

Questions connexes