Để làm rõ mục đích của câu hỏi này: Tôi biết CÁCH tạo các khung nhìn phức tạp với cả các cuộc phỏng vấn và sử dụng drawRect. Tôi đang cố gắng để hiểu đầy đủ khi nào và tại sao nên sử dụng cái này hơn cái kia.
Tôi cũng hiểu rằng sẽ không có ý nghĩa gì khi tối ưu hóa điều đó trước thời hạn và làm điều gì đó theo cách khó khăn hơn trước khi thực hiện bất kỳ hồ sơ nào. Hãy xem xét rằng tôi cảm thấy thoải mái với cả hai phương pháp và bây giờ thực sự muốn hiểu sâu hơn.
Rất nhiều sự nhầm lẫn của tôi đến từ việc học cách làm cho hiệu suất cuộn bảng xem thực sự trơn tru và nhanh chóng. Tất nhiên nguồn gốc của phương pháp này là từ tác giả đằng sau twitter cho iPhone (trước đây là tweetie). Về cơ bản nó nói rằng để làm cho việc cuộn bảng trở nên trơn tru, bí mật là KHÔNG sử dụng các cuộc phỏng vấn, mà thay vào đó hãy thực hiện tất cả các bản vẽ trong một uiview tùy chỉnh. Về cơ bản, có vẻ như việc sử dụng nhiều cuộc phỏng vấn sẽ làm chậm quá trình hiển thị vì chúng có rất nhiều chi phí và liên tục được tổng hợp lại theo quan điểm của phụ huynh.
Công bằng mà nói, điều này đã được viết khi 3GS là một thương hiệu mới, và iDevices đã nhanh hơn rất nhiều kể từ đó. Tuy nhiên , phương pháp này thường được đề xuất trên các interwebs và các nơi khác cho các bảng hiệu suất cao. Trên thực tế, đây là một phương pháp được đề xuất trong Mã mẫu của Apple , đã được đề xuất trong một số video WWDC ( Bản vẽ thực tế dành cho nhà phát triển iOS ) và nhiều sách lập trình iOS .
Thậm chí còn có các công cụ tìm kiếm tuyệt vời để thiết kế đồ họa và tạo mã Core Graphics cho chúng.
Vì vậy, lúc đầu tôi sẽ tin rằng "có một lý do tại sao Đồ họa lõi tồn tại. Nó NHANH CHÓNG!"
Nhưng ngay khi tôi nghĩ rằng tôi có ý tưởng "Ưu tiên đồ họa lõi khi có thể", tôi bắt đầu thấy drawRect thường chịu trách nhiệm cho khả năng phản hồi kém trong một ứng dụng, bộ nhớ cực kỳ tốn kém và thực sự đánh thuế CPU. Về cơ bản, tôi nên " Tránh ghi đè drawRect " ( Hiệu suất ứng dụng iOS WWDC 2012 : Đồ họa và hoạt hình )
Vì vậy, tôi đoán, giống như mọi thứ, nó phức tạp. Có lẽ bạn có thể giúp bản thân và những người khác hiểu khi nào và Tại sao lại sử dụng drawRect?
Tôi thấy một vài tình huống rõ ràng để sử dụng Đồ họa lõi:
- Bạn có dữ liệu động (ví dụ Biểu đồ chứng khoán của Apple)
- Bạn có một yếu tố UI linh hoạt không thể được thực thi với một hình ảnh có thể thay đổi kích thước đơn giản
- Bạn đang tạo một đồ họa động, một khi kết xuất được sử dụng ở nhiều nơi
Tôi thấy các tình huống để tránh Đồ họa lõi:
- Các thuộc tính của chế độ xem của bạn cần được làm động riêng
- Bạn có một hệ thống phân cấp chế độ xem tương đối nhỏ, do đó, bất kỳ nỗ lực bổ sung nào được sử dụng CG đều không đáng để đạt được
- Bạn muốn cập nhật các phần của chế độ xem mà không cần vẽ lại toàn bộ
- Bố cục của các cuộc phỏng vấn của bạn cần cập nhật khi kích thước khung nhìn cha mẹ thay đổi
Vì vậy, ban tặng kiến thức của bạn. Trong những tình huống nào bạn tiếp cận với drawRect / Core Graphics (điều đó cũng có thể được thực hiện với các cuộc phỏng vấn)? Yếu tố nào dẫn bạn đến quyết định đó? Làm thế nào / Tại sao việc vẽ trong một chế độ xem tùy chỉnh được khuyến nghị cho việc cuộn tế bào bảng trơn tru, nhưng Apple khuyên drawRect chống lại vì lý do hiệu suất nói chung? Còn những hình nền đơn giản (khi nào bạn tạo chúng bằng CG so với sử dụng hình ảnh png có thể thay đổi kích thước) thì sao?
Một sự hiểu biết sâu sắc về chủ đề này có thể không cần thiết để tạo ra các ứng dụng đáng giá, nhưng tôi không thích lựa chọn giữa các kỹ thuật mà không thể giải thích lý do tại sao. Não tôi nổi giận với tôi.
Cập nhật câu hỏi
Cảm ơn thông tin của mọi người. Một số câu hỏi làm rõ ở đây:
- Nếu bạn đang vẽ một cái gì đó với đồ họa cốt lõi, nhưng có thể hoàn thành điều tương tự với UIImageViews và png được kết xuất sẵn, bạn có nên luôn đi theo con đường đó không?
- Một câu hỏi tương tự: Đặc biệt với các công cụ badass như thế này , khi nào bạn nên xem xét vẽ các yếu tố giao diện trong đồ họa cốt lõi? (Có lẽ khi màn hình của phần tử của bạn thay đổi. Ví dụ: một nút có 20 biến thể màu khác nhau. Có trường hợp nào khác không?)
- Theo sự hiểu biết của tôi trong câu trả lời của tôi dưới đây, liệu có thể đạt được hiệu suất tương tự cho một ô của bảng bằng cách chụp hiệu quả một ảnh chụp nhanh của ô của bạn sau khi hiển thị UIView phức tạp của bạn và hiển thị trong khi cuộn và ẩn chế độ xem phức tạp của bạn? Rõ ràng một số phần sẽ phải được làm việc ra. Chỉ là một suy nghĩ thú vị mà tôi có.