2011-10-21 23 views
12

Pha trộn và hiển thị trên màn hình hiển thị đều đắt tiền trong Hoạt ảnh chính.Trộn V.S. offscreen-rendering, cái nào tệ hơn cho hiệu năng Core Animation?

Người ta có thể nhìn thấy chúng trong Core Animation cụ trong Instruments, với gỡ lỗi Options: Instruments

Đây là trường hợp của tôi:

Display 50x50 PNG hình ảnh trên UIImageViews. Tôi muốn làm tròn hình ảnh với bán kính 6 điểm. Phương pháp đầu tiên là thiết lập angleRadius và masksToBounds của UIImageView.layer gây ra hiển thị offscreen. Phương pháp thứ hai là tạo các bản sao ảnh PNG với các góc trong suốt gây ra sự pha trộn (vì kênh alpha).

Tôi đã thử cả hai, nhưng tôi không thể thấy sự khác biệt hiệu suất đáng kể. Tuy nhiên, tôi vẫn muốn biết cái nào là tồi tệ hơn trong lý thuyết và thực hành tốt nhất nếu có.

Cảm ơn rất nhiều!

Trả lời

8

Vâng, câu trả lời ngắn, việc pha trộn phải xảy ra theo cách nào đó để hiển thị chính xác pixel góc trong suốt. Tuy nhiên, điều này thường chỉ là vấn đề nếu bạn muốn xem kết quả cũng hoạt ảnh theo cách nào đó (và hãy nhớ, di chuyển là loại hoạt ảnh phổ biến nhất). Ngoài ra, tôi có thể tạo lại các tình huống mà "angleRadius" sẽ gây ra lỗi hiển thị trên các thiết bị cũ hơn (iPhone 3G trong trường hợp của tôi) khi chế độ xem của tôi trở nên phức tạp. Đối với các tình huống mà bạn cần hoạt ảnh biểu diễn, dưới đây là các đề xuất tôi làm theo. Trước tiên, nếu bạn chỉ cần các nguồn lực với một đường cong duy nhất cho các góc tròn (thang khác nhau là tốt, miễn là độ cong mong muốn là như nhau), lưu chúng theo cách đó để tránh tính thêm của "angleRadius" trong thời gian chạy.

Thứ hai, không sử dụng độ trong suốt ở bất cứ nơi nào bạn không cần nó (ví dụ: khi nền thực sự là màu đồng nhất) và luôn chỉ định giá trị chính xác cho thuộc tính "đục" để giúp hệ thống tính toán hiệu quả hơn bản vẽ.

Thứ ba, tìm cách giảm thiểu kích thước của chế độ xem trong suốt. Ví dụ, đối với chế độ xem đường viền lớn với các phần tử trong suốt (ví dụ góc tròn), hãy xem xét chia tách khung nhìn thành 3 phần (trên, giữa, dưới) hoặc 7 (4 góc, giữa trên, giữa, dưới), giữ phần trong suốt càng nhỏ càng tốt và đánh dấu các phần hình chữ nhật như mờ đục, với nền chắc chắn.

Thứ tư, trong trường hợp bạn vẽ nhiều văn bản trong scrollViews (ví dụ: UITableViewCell được tùy chỉnh cao), hãy xem xét sử dụng phương thức "drawRect:" để hiển thị các phần này hiệu quả hơn. Tiếp tục sử dụng các bản xem trước cho các phần tử hình ảnh, để chia thời gian hiển thị giữa chế độ xem tổng thể giữa bản vẽ trước (bản xem trước) và bản vẽ "just-in-time" (drawRect :). Rõ ràng, thử nghiệm (khung hình trên giây trong khi cuộn) có thể cho thấy rằng việc vi phạm "quy tắc ngón tay cái" này có thể tối ưu cho các chế độ xem cụ thể của bạn.

Cuối cùng, đảm bảo bạn có nhiều thời gian để thử nghiệm bằng cách sử dụng các công cụ lược tả (đặc biệt là CoreAnimation) là chìa khóa. Tôi thấy rằng dễ dàng nhất để xem các cải tiến bằng cách sử dụng thiết bị chậm nhất mà bạn muốn nhắm mục tiêu và kết quả trông tuyệt vời trên các thiết bị mới hơn.

4

Sau khi xem video WWDC và có một số thử nghiệm với Xcode và dụng cụ, tôi có thể nói rằng kết hợp sẽ tốt hơn khi hiển thị trên màn hình. Trộn nghĩa là hệ thống yêu cầu thêm một chút thời gian để tính màu của các điểm ảnh trên các lớp trong suốt. Các lớp trong suốt hơn bạn có (và kích thước lớn hơn của các lớp này) sau đó pha trộn mất nhiều thời gian hơn.

Hiển thị trên màn hình có nghĩa là hệ thống sẽ tạo nhiều hơn một lần lặp lại kết xuất. Tại hệ thống lặp đầu tiên sẽ làm cho hiển thị mà không cần trực quan chỉ để tính giới hạn và hình dạng của khu vực cần được hiển thị. Trong hệ thống lặp tiếp theo có hiển thị thường xuyên (phụ thuộc vào hình dạng được tính toán) bao gồm trộn nếu được yêu cầu.

Ngoài ra đối với hệ thống hiển thị hình ảnh ngoài màn hình sẽ tạo ra bối cảnh đồ họa riêng biệt và phá hủy nó sau khi hiển thị.

Vì vậy, bạn nên tránh hiển thị trên màn hình và tốt hơn nên thay thế bằng cách pha trộn.

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