2012-02-17 21 views
9

Tôi có bố cục kiểu menu bên dưới bắt chước facebook. Tôi muốn có một dropshadow ở phía bên trái như dưới đây tuy nhiên mã tôi đang sử dụng với lớp bóng làm cho ứng dụng LAGGY. Tôi đã không thể tìm ra giải pháp thay thế tốt. Có ai có thay thế cho việc tạo ra một dropshadow mà không ảnh hưởng đến hiệu suất ứng dụng?iOS: Tạo một mặt nạ thả xuống một mặt

[self.navController.view.layer setShadowOffset:CGSizeMake(0, 1)]; 
[self.navController.view.layer setShadowColor:[[UIColor darkGrayColor] CGColor]]; 
[self.navController.view.layer setShadowRadius:8.0]; 
[self.navController.view.layer setShadowOpacity:0.8]; 

Mã trên là mã tôi hiện đang sử dụng gây ra sự cố hiệu suất ứng dụng.

Hình ảnh dưới đây là những gì tôi muốn đạt được nhưng không phải sử dụng mã ở trên.

enter image description here

Trả lời

10

Nó sẽ giúp để xác định một con đường bóng, ví dụ,

CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:self.navController.view.layer.bounds].CGPath; 
[self.navController.view.layer setShadowPath:shadowPath] 

Theo CALayer documentation, "Xác định một con đường rõ ràng thường cải thiện hiệu suất."

+0

Awesome! điều này đã giúp rất nhiều tuy nhiên tôi nhận thấy một chút hiệu suất vẫn còn nhưng không xấu. – Bot

0

Tôi cho bản thân mình sẽ chỉ thêm một UIView chứa bóng đó làm chế độ xem phụ và đặt lại vị trí ngay khi chế độ xem ở bên phải hoạt ảnh. (Ví dụ rút ra rằng bóng với lớp hoặc đồ họa lõi)

+0

Thêm quá nhiều lượt xem sẽ giảm hiệu suất bạn thân –

4

Bạn có thể chỉ inset quan điểm giới hạn và thiết lập đường dẫn bóng:

UIEdgeInsets contentInsets = UIEdgeInsetsMake(10, 0, 0, 0); 
CGRect shadowPathExcludingTop = UIEdgeInsetsInsetRect(self.bounds, contentInsets); 
self.layer.shadowPath = [UIBezierPath bezierPathWithRect:shadowPathExcludingTop].CGPath;