2013-01-08 32 views
6

Hi i muốn thêm một CALayer Shadow để một Xem nơi bóng được trái và bên phải của xem cách đơn giản nhất là:bóng bên trái và bên phải của UIView

someView.layer.shadowColor = [[UIColor blackColor] CGColor]; 
someView.layer.shadowOffset = CGSizeMake(0.0f,0.0f); 
someView.layer.shadowOpacity = 1.0f; 
someView.layer.shadowRadius = 10.0f; 
someView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:someView.bounds] CGPath]; 

nhưng tôi sẽ bổ sung thêm một cái bóng lớn hơn như giống như một cái bóng khi tôi tăng shadowRadius nó trông không tốt. Làm thế nào tôi có thể làm cho một cái bóng trông tốt ở bên trái và bên phải.

Trả lời

26

Tôi nghĩ 10 là một bán kính bóng khá lớn, hãy thử 3 hoặc 4 thay vào đó, cũng opacity Tôi thường sử dụng 0.7:

someView.layer.shadowColor = [[UIColor blackColor] CGColor]; 
someView.layer.shadowOffset = CGSizeMake(0.0f,0.0f); 
someView.layer.shadowOpacity = 0.7f; 
someView.layer.shadowRadius = 4.0f; 

Nếu bạn muốn cái bóng chỉ ở bên trái và phải, sau đó inset hình chữ nhật trên trên cùng và dưới cùng để bóng trên cùng và dưới cùng được ẩn đằng sau chế độ xem của bạn:

CGRect shadowRect = CGRectInset(someView.bounds, 0, 4); // inset top/bottom 
someView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:shadowRect] CGPath]; 

Tôi không thực sự chắc chắn nếu đó là những gì bạn muốn.

+0

Tôi đã nói chuyện với nhà thiết kế của tôi bóng này là nhỏ. Tôi cần các lệch số x khác nhau ở bên trái và bên phải. – Zeropointer

+0

Câu trả lời tuyệt vời, Nhưng kẻ có ai đó thực hiện điều này với các góc tròn (mịn hơn), vì bóng này giống như trực tràng trông xấu. Bất kỳ thông tin chi tiết nào? Cảm ơn trước ! :) –

+0

Sử dụng bezierPathWithRoundedRect thay vì – progrmr

0

Câu trả lời của progrmr rất hữu ích, chúc mừng!

Tôi đã tạo ra một trình đơn trượt và tôi gặp vấn đề với bóng xung quanh VC của tôi và làm gián đoạn thanh điều hướng. Hóa ra tôi phải bẻ lớp bóng.

Đây là giải pháp của tôi sử dụng nhanh chóng:

rightViewController!.view.layer.shadowOpacity = 0.8 
rightViewController!.view.layer.shadowOffset = CGSizeMake(0, 3) 
rightViewController!.view.layer.shadowRadius = 4.0 

let shadowRect: CGRect = CGRectInset(rightViewController!.view.bounds, 0, 4); // inset top/bottom 
rightViewController!.view.layer.shadowPath = UIBezierPath(rect: shadowRect).CGPath 
4

nhanh chóng 3.0 phiên bản

imageView.layer.shadowOpacity = 0.8 
imageView.layer.shadowOffset = CGSize(width: 0, height: 3) 
imageView.layer.shadowRadius = 4.0 

let shadowRect: CGRect = imageView.bounds.insetBy(dx: 0, dy: 4) 
imageView.layer.shadowPath = UIBezierPath(rect: shadowRect).cgPath 
Các vấn đề liên quan