2009-12-21 8 views
3

J'essaie d'ajouter une ombre portée à une vue UIImage. Je reçois une ombre mais elle est coupée sur les bords de la vue de l'image et je ne sais pas pourquoi puisque j'ai correctement défini le uiimageview.clipsToBounds à NO. Voici le code:J'essaie d'ajouter une ombre portée à un UImageView

-(void)addShadow 
{ 
    UIGraphicsBeginImageContext(self.frame.size); 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 
    float   myColorValues[] = {0, 0, 0, darkness};// 3 
    CGColorRef  myColor;// 4 
    CGColorSpaceRef myColorSpace; 
    CGContextSaveGState(myContext);// 6 

    myColorSpace = CGColorSpaceCreateDeviceRGB();// 9 
    myColor = CGColorCreate (myColorSpace, myColorValues);// 10 
    CGContextSetShadowWithColor (myContext, myShadowOffset, spread, myColor);// 11 
    // Your drawing code here// 12 
    // CGContextDrawImage(myContext, rotatingView.frame,imgRef); 

    rotatingView.clipsToBounds = NO; 
    [rotatingView.image drawInRect:rotatingView.frame 
         blendMode:kCGBlendModeNormal alpha:.5]; 
    CGColorRelease (myColor);// 13 
    CGColorSpaceRelease (myColorSpace); // 14 

    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); 
    CGContextRestoreGState(myContext); 
    UIGraphicsEndImageContext(); 
    rotatingView.image = imageCopy; 
} 

Répondre

2

Je crois que le CGContextRef vous a également passé ensemble d'écrêtage, pour empêcher essentiellement ce comportement exact. Vous pouvez essayer d'ajouter un calayer:

CALayer       *layer = [CALayer layer]; 
CGRect       bounds = self.bounds; 

layer.bounds = bounds; 
layer.position = CGPointMake(bounds.size.width/2 + 5, bounds.size.height/2 + 5); 
layer.backgroundColor = [UIColor colorWithWhite: 0.10 alpha: 0.75].CGColor; 
layer.zPosition = -5; 

[self.layer addSublayer: layer]; 
+0

J'ai essayé d'ajouter ce code, mais je me retrouve avec des ombres écrêtées. – April

+0

Est-ce que je fais autre chose de mal en ajoutant le code comme ci-dessus? ou la couche est-elle supposée être l'ombre? – April

+0

Le calque est censé être l'ombre. Vous avez défini clipsToBounds sur NO encore? –