2011-04-28 6 views
5

Tôi muốn áp dụng bóng bên trong cho nhãn UILabel. Tôi có một giải pháp, nhưng nó không đủ tốt. Bất cứ ai có một giải pháp tốt hơn?Áp dụng bóng bên trong cho UILabel

// UILabel subclass 

- (void) drawTextInRect:(CGRect)rect { 
    CGSize myShadowOffset = CGSizeMake(0, 2); 
    float myColorValues[] = {255, 0, 0, 1}; 

    CGContextRef myContext = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(myContext); 

    CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGColorRef myColor = CGColorCreate(myColorSpace, myColorValues); 

    CGContextSetShadowWithColor (myContext, myShadowOffset, 5, myColor); 
    CGContextSetBlendMode(myContext, kCGBlendModeLighten); 

    [super drawTextInRect:rect]; 

    CGColorRelease(myColor); 
    CGColorSpaceRelease(myColorSpace); 

    CGContextRestoreGState(myContext); 
} 

Tôi quen thuộc với thuộc tính lớp UILabel, nhưng shadow offset cho chúng ta một outer-shadow, KHÔNG nội bóng (trừ khi tôi đang thiếu một cái gì đó).

+0

Bạn đã thử các giá trị âm trong myShadowOffset chưa? – adam

Trả lời

4

Tôi đã cố gắng thực hiện điều này nhưng cuối cùng đã chọn sử dụng mặc định shadowOffset và phát với shadowColor để cung cấp hiệu ứng đổ bóng bên trong cho văn bản. Trong văn bản nhỏ nó mang lại cho bạn một hiệu ứng bóng tối bên trong tốt. Ví dụ, nếu bạn có một nền grayColor và áp dụng một whiteColor vào bóng tối, sau đó bạn có một hiệu ứng bóng tối bên trong có thể chấp nhận được.

Đôi khi, tốt hơn là nên thiết kế các văn bản đó bằng công cụ đồ họa và tạo bản sao được bản địa hóa nếu cần.

21

vay về câu trả lời của Ruben ở trên, nếu bạn làm ngược lại tức. thiết lập màu văn bản của bạn bằng màu nền của bạn (với alpha thấp) và sau đó thiết lập bóng là một màu mạnh hơn, nó tạo ra một hiệu ứng inset khá. Đây là những gì tôi muốn nói (Lưu ý: nền Quan điểm của tôi là màu trắng):

cell.textLabel.textColor  = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]; 
cell.textLabel.shadowColor = [UIColor darkGrayColor]; 
cell.textLabel.shadowOffset = CGSizeMake(-1.0,-1.0); 
[cell.textLabel setText:@"Welcome to MyApp!"]; 

và đây là sản phẩm

inset UILabel text

này có lẽ chỉ có tác dụng trên nền rất nhẹ như tôi nghi ngờ nó sẽ tạo ra lớp phủ không mong muốn trên nền tối hơn.

Bạn có thể yêu cầu thay đổi shadowOffset để thay đổi hướng ánh sáng.

+0

Rất đơn giản, một giải pháp tuyệt vời. – Nik