DrawRect của Everytime UIView được gọi, nội dung được vẽ bởi drawRect trước đó (sử dụng Core Graphics) sẽ bị xóa. Làm thế nào tôi có thể làm cho nó để các đường dẫn được hiển thị từ các cuộc gọi drawRect trước đây vẫn tồn tại cho đến khi tôi xóa nó một cách rõ ràng?Làm thế nào để ngăn chặn drawRect của UIView từ thanh toán bù trừ ra các đường dẫn được rút ra bởi các cuộc gọi drawRect trước đó?
Trả lời
Bạn về cơ bản cần phải cắt phần 'bẩn' của trực tuyến của bạn, nơi thay đổi đã được thực hiện, và chỉ phần này sẽ được vẽ lại.
- (void)setNeedsDisplayInRect:(CGRect)invalidRect
Tôi chắc chắn không có cách nào xung quanh việc này; đó là cách UIView được thiết kế để hoạt động. Nếu được yêu cầu, chế độ xem tùy chỉnh của bạn sẽ có thể vẽ bất kỳ phần nào của chính nó bất kỳ lúc nào. Điều này một phần vì lượt xem có thể làm nhiều hơn là chỉ xuất hiện trên màn hình. ví dụ. trên máy tính để bàn, chúng có thể được in và thậm chí trên iPhone, bạn có thể muốn chụp nội dung của chế độ xem thành bitmap.
Tôi đang tự đấu tranh vấn đề này ngay bây giờ. Vấn đề là có một tài sản trên UIView gọi là "clearsContextBeforeDrawing" mà theo tài liệu có nghĩa vụ phải khắc phục vấn đề này, tuy nhiên nó không hoạt động theo cách đó trong kinh nghiệm của tôi.
Tôi nghĩ cuối cùng giải pháp cho việc này là phân bổ bộ đệm ngoài màn hình và thực hiện tất cả bản vẽ ở đó, sau đó chuyển nó lên UIView trong phương thức drawRect.
Vâng, điều đó cũng làm tăng các vấn đề KHÁC: một là iPhone/iPad chỉ hỗ trợ RGBA chứ không phải RGB, vì vậy việc cập nhật màn hình yêu cầu RGBA-> RGB chuyển đổi (chiếm 99% thời gian.) Plus, nó vẫn sẽ xóa UIView vô ích, hoàn toàn không có mục đích. Nếu có ai biết cách giải quyết những vấn đề này, xin hãy ping! – gilm
Tôi nghĩ rằng sử dụng một bộ đệm offscreen có thể là giải pháp quá (CGLayer/CGRect), nhưng sau khi cố gắng này nó đã không có cải thiện đáng chú ý về hiệu suất. Có vẻ như hành động vẽ bối cảnh toàn màn hình chậm bất kể độ phức tạp của thao tác vẽ. –
- 1. Khi nào - [UIView drawRect:] Phương thức được viện dẫn?
- 2. Lớp con UIView: drawRect không được gọi là
- 3. drawRect trên đầu trang của các bản xem trước
- 4. UIView layer góc tròn và -drawRect:
- 5. Điểm chuẩn UIView drawRect: phương pháp
- 6. Làm thế nào để ngăn chặn một phương thức được rút ra nhiều lần?
- 7. Làm thế nào để điền vào một đường dẫn với gradient trong drawRect :?
- 8. CALayer & drawRect
- 9. Ngăn chặn đầu ra trong các cuộc gọi Python đến các tệp thực thi
- 10. setNeedsDisplay không phải lúc nào cũng gọi drawRect
- 11. Làm thế nào để vẽ một UILabel in -drawRect :?
- 12. drawRect không được gọi trong lớp con của UIImageView
- 13. Làm thế nào để ngăn chặn git svn rebase để tạo ra các thư mục rỗng
- 14. Hướng dẫn lắp ráp, thanh toán bù trừ cờ & TF
- 15. Làm thế nào để VS2010 nhận ra các mstest của tôi được tạo ra bởi SpecFlow?
- 16. Sụp đổ trong drawRect - nguyên nhân gây ra nó?
- 17. Trên iOS, drawRect không thể vẽ ra ngoài giới hạn của khung nhìn?
- 18. setNeedsDisplay không kích hoạt drawRect trong các bản xem trước như mong đợi
- 19. đối tượng thanh toán bù trừ từ localStorage
- 20. Đường viền dày của chuỗi được rút ra
- 21. GLKit's -drawRect: không được gọi trong khi xoay màn hình
- 22. Ngăn chặn tất cả các đầu ra ngoại trừ lỗi và cảnh báo
- 23. thao tác bit: phạm vi thanh toán bù trừ của các bit
- 24. làm thế nào tôi có thể ngăn chặn đầu ra từ Sweave không bị chặn bởi echo = FALSE?
- 25. làm thế nào để ngăn chặn đầu ra khi sử dụng `: =` trong R {data.table}, trước v1.8.3?
- 26. Làm thế nào để ngăn chặn việc cron được tạo ra bởi "bất cứ khi nào" viên ngọc
- 27. drawRect vẽ văn bản 'trong suốt'?
- 28. Làm thế nào để ngăn chặn Url.RouteUrl (...) từ kế thừa các giá trị đường từ yêu cầu hiện tại
- 29. drawRect không làm mới màn hình
- 30. Ngăn chặn các quá trình thực thi các cuộc gọi hệ thống nhất định
Vấn đề không phải là rect không được vẽ lại mà là khi drawRect được phát hành lại, nó xóa tất cả các đường dẫn được vẽ trước đó. Có vẻ như đó là hành vi mặc định với thường trình vẽ của Core Graphic. – Boon