2013-06-23 2 views
1

UIBezierPath를 사용하여 UIView의 사용자 지정 그림자를 만들려고합니다. 내가 커스텀 패스를 그리는 데 어려움을 겪고 있기는하지만, 그림자를 경사지게하고 싶다.어려움 그림자 그리기

self.layer.shadowColor = [UIColor blackColor].CGColor; 
self.layer.shadowOpacity = 0.7f; 
self.layer.shadowOffset = CGSizeMake(-5.0f, 10.0f); 
self.layer.shadowRadius = 5.0f; 
self.layer.masksToBounds = NO; 

CGFloat shadowDepth = 20.0; 

UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(0.0, 0.0)]; 
[path addLineToPoint:CGPointMake(self.bounds.size.width, shadowDepth)]; 
[path stroke]; 

self.layer.shadowPath = path.CGPath; 

그림자가 표시되지 않습니다. 그림자의 경로를보기 경계선으로 설정하면 그림자가 올바르게 표시됩니다. 따라서 베 지어 경로를 잘못 그리어야합니다. 아이디어가 있으십니까?

이 작동 :

UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.bounds]; 

답변

3

당신은 닫힌 경로를 정의 할 필요가있다. 스트로크 할 필요가 없습니다.

UIBezierPath *path = [UIBezierPath bezierPath]; 
CGRect bounds = self.bounds; 
CGFloat xMax = CGRectGetMaxX(bounds); 
CGFloat yMax = CGRectGetMaxY(bounds); 
[path moveToPoint:CGPointMake(bounds.x + shadowDepth, bounds.y)]; 
[path addLineToPoint:CGPointMake(xMax + shadowDepth, bounds.y)]; 
[path addLineToPoint:CGPointMake(xMax, yMax)]; 
[path addLineToPoint:CGPointMake(bounds.x, yMax)]; 
[path closePath]; 
self.layer.shadowPath = path.CGPath;