2011-08-29 24 views
5

Nếu tôi có một lớp con tùy chỉnh của UIView triển khai drawRect và các phương pháp điều khiển sử dụng addSubview để tạo phân cấp chế độ xem trong chế độ xem tùy chỉnh này, cách drawRect tương tác với các bản xem trước này? Liệu nó có tạo lại toàn bộ hệ thống phân cấp khung nhìn của lớp con từ đầu và loại bỏ bất kỳ bản xem trước hiện có nào không? Hay nó bỏ qua các bản xem trước và chỉ vẽ lại một chế độ xem/chế độ xem phụ cụ thể?drawRect và addSubview: bản vẽ tùy chỉnh ảnh hưởng đến chế độ xem nào?

Bạn có thể chấp nhận và loại bỏ phụ đề theo chương trình trong phạm vi drawRect không?

Trả lời

7

drawRect có nghĩa là chỉ để vẽ nội dung của bạn trong chế độ xem.

Cho dù nó vẽ toàn bộ khung nhìn hay một phần của nó: Nó phụ thuộc vào việc triển khai của bạn. Nếu bạn muốn thực hiện bất kỳ tối ưu hóa nào, hãy kiểm tra khi nào chế độ xem của bạn gọi số drawRect và điều chỉnh mã cho phù hợp (có thể bạn chỉ muốn cập nhật một phần của chế độ xem, có thể bạn không muốn vẽ tất cả các lần, v.v.) . Nó phụ thuộc vào nhu cầu của bạn

Tôi không nghĩ là một ý tưởng tốt để thêm/xóa subviews trong drawRect vì phương pháp này sẽ được gọi trong một số tình huống và tôi dám nói rằng là không những gì bạn muốn :)

Thay vào đó, bạn có thể thử một cái gì đó như thế này:

[myView addSubview:aSubview]; 
[myView setNeedsDisplay]; 
//or calculate the needed display rect by yourself and then 
[myView setNeedsDisplayInRect:aRect]; 
+1

sự nhầm lẫn của tôi là về việc các bản xem trước của bạn trong lớp uiview tùy chỉnh sẽ thực sự bị ảnh hưởng bởi 'drawRect'? 'setNeedsdisplay' không chỉ định một khung nhìn cụ thể ... do đó nó sẽ vẽ lại bất kỳ và tất cả các bản xem trước, nếu chúng nằm trên đầu trang của nhau không? – johnbakers

2

-drawRect: không tương tác với các bản xem trước. Nó rút ra bất cứ cái gì nó được gửi để muốn vẽ trong rect nó được đưa ra.

Bạn có thể chấp nhận và loại bỏ phụ đề theo chương trình trong drawRect không?

NO.-drawRect: dùng để vẽ, không phải để thao tác phân cấp chế độ xem.

+0

Cảm ơn nhưng tôi không rõ ràng chế độ xem nào sẽ được cập nhật với 'setNeedsDisplay' vì bạn không chỉ định một chế độ xem cụ thể. – johnbakers

+0

-setNeedsDisplay luôn được gửi tới chế độ xem. – NSResponder

+0

Ah, vì vậy khi bạn nói '[someView setNeedsDisplay]' nó sẽ không ảnh hưởng đến bất kỳ subviews của view đó, mà thay vào đó có thể được vẽ lại bằng cách giải quyết chúng trực tiếp như '[someView.subview setNeedsDisplay]', đúng không? – johnbakers

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