2011-09-08 28 views
7

Tôi đang cố gắng vẽ một đường thẳng với bóng nhưng tôi không muốn giữ đường nhưng chỉ có bóng.Vẽ một đường có bóng, nhưng chỉ muốn giữ bóng. IOS

Tôi đã cố gắng đặt màu nét của đường kẻ trong suốt nhưng khi tôi làm điều đó bóng cũng biến mất.

Đoạn mã sau tạo 2 dòng, tôi chỉ muốn giữ bóng vì trông đẹp hơn và không bị tạo pixel như dòng.

Điều này có khả thi không?

CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0); 

    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0); 
    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES);  

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
    CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
    CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(10,10), 4.0, shadowColor); 

Cảm ơn.

Trả lời

9

Vì vậy, bạn không thể làm điều này trực tiếp vì bóng phản ánh đường dẫn, vì vậy nếu bạn làm cho đường dẫn trong suốt, bóng cũng sẽ trong suốt. Có một vài cách giải quyết mà tôi có thể nghĩ đến (phụ thuộc vào chính xác những gì bạn đang làm) nhưng một cách lén lút chỉ là vẽ bóng tối đủ xa con đường mà bạn có thể vẽ lên nó, về cơ bản là xóa nó đi. Ví dụ: nếu nền màu trắng, điều này sẽ thực hiện những gì bạn muốn:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0); 
    CGContextSetLineWidth(context, 10.0); 
    CGContextMoveToPoint(context, 10.0, 30.0); 
    CGContextAddLineToPoint(context, 310.0, 30.0); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
    CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
    CGContextSetShadowWithColor(context, CGSizeMake(0.0f,20.0f), 4.0, shadowColor); 
    CGContextStrokePath(context); 

    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
    CGContextSetLineWidth(context, 10.0); 
    CGContextMoveToPoint(context, 10.0, 30.0); 
    CGContextAddLineToPoint(context, 310.0, 30.0); 
    CGContextStrokePath(context); 
} 

hy vọng điều này sẽ hữu ích.

2

tại sao bạn không chỉ vẽ đường kẻ của mình dưới dạng bóng. Không có bóng được vẽ mà thay vào đó vẽ một đường màu đen có độ phân giải là 25 hoặc thấp hơn và bù đắp nó đến nơi bạn mong đợi bóng đổ.

Các vấn đề liên quan