Tôi đang thêm vài CALayer làm lớp con của lớp UIView. Nội dung của mỗi lớp là một hình ảnh khác nhau được tải xuống từ máy chủ. Mỗi lớp được làm động từ màn hình ngoài đến vị trí được tạo ngẫu nhiên. Dữ liệu hình ảnh được tải xuống không đồng bộ. Mỗi hình ảnh có kích thước xấp xỉ 300x300 hoặc nhỏ hơn.Tối ưu hóa CALayer?
Do vị trí ngẫu nhiên, các lớp chồng lên nhau và một số bị che khuất bởi các lớp phía trên chúng. Tất cả đều tốt.
Tôi đang xóa các lớp khi chúng bị che khuất hoàn toàn khỏi chế độ xem bằng cách sử dụng đề xuất trong the answer to this question Các tính toán để xác định mức độ phù hợp xảy ra trên một chuỗi riêng biệt.
Tôi có UIPanGestureRecognizer cho phép người dùng kéo các lớp xung quanh trên màn hình.
Tôi gặp phải sự cố về hiệu suất khi số lượng lớp được thêm vào 25-30 và dần dần trở nên tồi tệ hơn. Các hình ảnh động trở nên choppy và thường hoàn toàn vắng mặt (các lớp mới được thêm vào chỉ đơn giản xuất hiện ở vị trí cuối cùng của chúng). Và cử chỉ pan bị bỏ qua hoặc dẫn đến việc tái định vị của lớp đã chọn.
Tôi giả sử rằng tôi đang giết GPU với tất cả các lớp chồng lên nhau và một lớp khác đang hoạt ảnh ở trên?
Bất kỳ đề xuất nào về cách cải thiện hiệu suất?
Thực tiễn tốt nhất để xử lý số lượng lớn các lớp?
Làm cách nào để lớp bắt đầu hoạt ảnh trong chế độ xem riêng biệt hơn các lớp đã thêm trước đó?
Cảm ơn!
Cảm ơn Bill. Tôi sẽ cho nó một viên đạn. Tôi đã được ấn tượng rằng opaque đã bị bỏ qua khi cung cấp layer.contents (chỉ được sử dụng khi một lớp đang được vẽ trên?). Bit alpha sẽ phức tạp hơn - tôi đang sử dụng đường viền trong suốt rộng 2px xung quanh mép của hình ảnh để làm mịn các cạnh được xoay. Tắt đến các dụng cụ !! – TomH
Hi Tom - yep opaque bị bỏ qua trừ khi vẽ, bạn có thể nghĩ nó là arg thứ 2 cho UIGraphicsBeginImageContextWithOptions, nếu nội dung của bạn có kênh alpha thì lớp sẽ trong suốt - nếu bạn có thời gian, hãy gửi lỗi về cờ edgeAntialiasingMask –
Tuyệt vời.Tôi đã thêm kênh alpha vào UIImage của mình, thêm đường viền trong suốt 2px và sau đó sử dụng hình ảnh làm nội dung cho lớp. Perf được cải thiện rất nhiều bằng cách không thêm đường viền alpha và trong suốt - không có vấn đề gì với> 30 lớp. Thật không may, edgeAntialiasingMask dường như không có bất kỳ hiệu ứng nào. Tôi sẽ gửi một lỗi. – TomH