2012-05-26 32 views
6

Tôi muốn được thông báo bất cứ khi nào một số thay đổi nhất định của NSView- (NSRect)visibleRect vì tôi muốn thực hiện một số bố cục tiểu sử ưa thích dựa trên hình ảnh có thể nhìn thấy. Thành thật mà nói, ngay bây giờ tôi đang bối rối; -visibleRect không phát ra thông báo KVO (có ý nghĩa), và dường như không có cách nào để tìm hiểu xem có thể nhìn thấy trực tràng thay đổi hay không mà không gọi rõ ràng -visibleRect.Có thể quan sát-invisibleRect

Điều này có thể thực hiện được không? (hoặc nó là một ý tưởng tồi tệ khủng khiếp?)

+1

Tại sao dấu trừ 1? – Vervious

Trả lời

6

Tôi nghĩ bạn có thể ghi đè -[NSView updateTrackingAreas] hoặc nghe NSViewDidUpdateTrackingAreasNotification. Những điều này có thể xảy ra vào nhiều dịp hơn là chỉ thay đổi trực tràng có thể nhìn thấy, nhưng chúng sẽ xảy ra cho bất kỳ thay đổi nào của trực tràng có thể nhìn thấy. Tôi nghĩ.

Điều đó nói rằng, đó có thể là một ý tưởng tồi tệ. Khó biết. :)

+0

Khả thi, cảm ơn. – Vervious

+0

Câu hỏi và câu trả lời hay. Câu trả lời này đã giúp tôi thoát khỏi một vấn đề khác mà tôi đang gặp phải nhưng tôi cũng có câu hỏi này. Và đối với câu hỏi này tôi sẽ bỏ phiếu cho câu trả lời này nhưng không chấp nhận nó. – trss

+0

Tài liệu cho 'updateTrackingAreas' cho biết" Được gọi tự động khi hình dạng của chế độ xem thay đổi sao cho các khu vực theo dõi của nó cần phải được tính toán lại. " nhưng không rõ hình học của khung nhìn có ý nghĩa gì. Có một chủ đề trên Xem Hình học nhưng chỉ giải thích giới hạn và khung. Nó giải thích visibleRect nhưng nó không gọi nó như là hình học của khung nhìn. – trss

1

Bài đăng tùy chọn khác 10.5 là phương pháp -viewWillDraw được gọi ngay trước khi xem (và các phần phụ của nó) được vẽ. Bạn có thể tìm hình chữ nhật có thể nhìn thấy của khung nhìn và thực hiện bố cục trước khi gọi [super viewWillDraw].

0

Những đề xuất của Ken về việc nghe những thay đổi trong khu vực theo dõi cảm thấy bị hack nhưng dường như hoạt động, mặc dù chúng chỉ kích hoạt sau khi thay đổi kích thước hoàn tất. Nếu bạn cần cập nhật trong quá trình thay đổi kích thước như tôi đã làm, nó ghi đè -[NSView resizeWithOldSuperviewSize:] sẽ làm điều đó

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