2010-09-09 21 views
18

Tôi đã rất vui mừng khi tôi phát hiện ra cách dễ dàng để thêm bóng vào UIViews của tôi trên iPhone/iPad.Vẽ bóng với Quartz chậm trên iPhone và iPad. Cách khác?

Chỉ cần thêm khuôn khổ trong Xcode, thêm việc nhập khẩu để phía trên cùng của file:

#import <QuartzCore/QuartzCore.h> 

Rồi sau:

self.contentView.layer.shadowRadius = 3.0; 
self.contentView.layer.shadowOffset = CGSizeMake(-2.0, -3.0); 
self.contentView.layer.shadowOpacity = 0.5; 
self.contentView.layer.shadowColor = [UIColor blackColor].CGColor; 

Trong khi điều này không tạo ra một bóng đẹp trong ứng dụng của tôi, nó cũng làm chậm đến chết khi khung nhìn được hiển thị ... ngay cả khi được đưa ra bên ngoài trình gỡ lỗi. Có cái gì tôi quên hoặc là phương pháp này chỉ là không thực tế cho quan điểm lớn hơn?

Để tham khảo, tôi đã đăng ảnh chụp màn hình here.

Trả lời

53

Bạn nên đặt shadowPath property. Đó là cách CoreGraphics có thể tối ưu hóa bóng tối.

Ví dụ, nếu tầm nhìn của bạn là một hình chữ nhật đục:

self.contentView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.contentView.bounds].CGPath; 
+0

Thật vậy, đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn! – Moduspwnens

+0

Tuy nhiên, đối với những người truy cập từ Google, bạn có thể thay đổi "self.bounds" thành "self.contentView.bounds" để khớp với ví dụ của tôi không? – Moduspwnens

+0

@Moduspwnens thực sự – cobbal

6

Nghĩ rằng tôi nên làm cho một câu trả lời vì tôi không muốn đá quý này để chôn cất trong các ý kiến.

Ngoài câu trả lời của cobbal ở trên, điều này đã giúp rất nhiều, occulus cũng đề cập đến tối ưu hóa sau cho các bóng không phải hình chữ nhật, chẳng hạn như bóng văn bản.

self.contentView.layer.shouldRasterize = YES; 
// Fix visual degradation when rasterizing on high-density screens: 
self.contentView.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 
Các vấn đề liên quan