2010-10-26 31 views
2

iOS 3.0 J'ai deux UIViewControllers A et B et ils sont ajoutés comme sous-vues dans le AppDelegate avec B au-dessus de A.Ajout ombre contour à un UIView compatible

Lorsqu'un UIButton sur B est prélevé diapositives B vers la gauche avec le code suivant:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(slideOutFinished)]; 
simonSaysView.view.frame = CGRectMake(40-BView.view.frame.size.width, BView.view.frame.origin.y, BView.view.frame.size.width, BView.view.frame.size.height); 
[UIView commitAnimations]; 

sur le côté droit, je veux une ombre 20px, mais je ne peux pas utiliser les propriétés d'ombre de BView.view.layer.shadow.... parce que son 3,2/4,0 + seulement. Et la performance de l'animation est affreuse, la glissade est extrêmement lente (elle parle couramment sans l'ombre).

Je pense utiliser un UIView personnalisé et faire un peu de magie dans drawRect mais est-ce possible ou est-ce que je peux seulement dessiner dans les limites de la vue?

J'espère que certains d'entre vous les gars et les filles peuvent m'aider.

Vive objneodude

+0

Utiliser 'CGContextSetShadow' – tadejsv

Répondre

3

résolu avec le code suivant

// Add drop shadow to the view. 
CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = CGRectMake(self.view.frame.size.width, 0, 30, self.view.frame.size.height); 
gradientLayer.colors = [NSArray arrayWithObjects: 
         (id)[UIColor blackColor].CGColor, 
         (id)[UIColor clearColor].CGColor, 
         nil]; 
gradientLayer.startPoint = CGPointMake(-2, 0.5); 
gradientLayer.endPoint = CGPointMake(1, 0.5); 
[self.view.layer addSublayer:gradientLayer]; 
0

J'ai eu le même problème, après avoir essayé différentes idées, Je viens d'ajouter un sous-vue d'une couleur d'ombre (gris) derrière le UIView je avais besoin pour avoir une ombre, voir le code: (Inclus le code pour> 3.2.x/4.x également

/*Shaded/rounded borders on subviews*/ 
self.viewOne.layer.cornerRadius = 10; 

self.viewOne.layer.borderColor = [UIColor darkGrayColor].CGColor; 
self.viewOne.layer.borderWidth = 0.8; 

self.viewTwo.layer.cornerRadius = 10; 
self.viewTwo.layer.borderColor = [UIColor darkGrayColor].CGColor; 
self.viewTwo.layer.borderWidth = 0.8; 

self.viewThree.layer.cornerRadius = 10; 
self.viewThree.layer.borderColor = [UIColor darkGrayColor].CGColor; 
self.viewThree.layer.borderWidth = 0.8; 

if (SYSTEM_VERSION_LESS_THAN(@"3.2")) { 
    self.shadowOne.layer.cornerRadius = 10; 
    self.shadowTwo.layer.cornerRadius = 10; 
    self.shadowThree.layer.cornerRadius = 10; 
} 
else{ 
    //Use QuartzCore to make shadows etc. 
    self.viewOne.layer.shadowColor = [[UIColor grayColor] CGColor]; 
    self.viewOne.layer.shadowOffset = CGSizeMake(2, 2); 
    self.viewOne.layer.shadowOpacity = 0.6; 
    self.viewOne.layer.shouldRasterize = YES; 
    self.viewOne.layer.shadowRadius = 2; 

    self.viewTwo.layer.shadowColor = [[UIColor grayColor] CGColor]; 
    self.viewTwo.layer.shadowOffset = CGSizeMake(2, 2); 
    self.viewTwo.layer.shadowOpacity = 0.6; 
    self.viewTwo.layer.shouldRasterize = YES; 
    self.viewTwo.layer.shadowRadius = 2; 

    self.viewThree.layer.shadowColor = [[UIColor grayColor] CGColor]; 
    self.viewThree.layer.shadowOffset = CGSizeMake(2, 2); 
    self.viewThree.layer.shadowOpacity = 0.6; 
    self.viewThree.layer.shouldRasterize = YES; 
    self.viewThree.layer.shadowRadius = 2; 
}