2009-10-04 53 views
1

我正在爲iPhone做一個科學的可視化應用程序。定期地,一個UIView子類將接收來自網絡的一些數據,它必須通過其重寫的drawRect:方法來呈現。UIView。我如何重新顯示「數據驅動」的UIView?

我的挑戰是,沒有辦法向Cocoa-Touch表明這個數據已經到達 - 或者改變了 - 除了對UIView邊界的改變之外的其他被忽略的[myView setNeedsDisplay]。我試圖隱藏和取消隱藏。 Nuthin'。

令人難以置信的是,因爲我所做的只是改變了UIView [myView setNeedsDisplay]的一些內部狀態。 Cocoa-Touch完全無法看到這種變化。根據Cocoa-Touch的說法,這種改變並不是觸發重繪的標準之一,因此我的UIView坐在那裏,沒有改變。

這是非常,非常非常令人沮喪的。我在這裏撞牆了。

有人可能會提出一個技巧,竅門,黑客,這將提示我的UIView重新呈現。

乾杯, 道格

回答

5

[myView setNeedsDisplay]應該引起drawRect:進行下一次你回來的運行循環和myView可見送到myView。如果更改邊界導致視圖重新繪製(myView.contentModeUIViewContentModeRedraw),則setNeedsDisplay必須正常工作,因爲這是通過邊界更改來指示重繪的方式。有關詳細信息,請參閱UIView class reference

您的drawRect:在第一次顯示視圖時被調用?否則,可能會拼寫錯誤,在子類中重寫,甚至錯誤的對象。

該視圖是否可見並顯示在屏幕上?如果它不在屏幕上,它將不會被繪製。

控件是否返回到事件循環?如果您的應用程序繁忙,則不會調用drawRect:

+0

Will, 好吧,這很奇怪。我已經移除了對[myView setNeedsDisplay]的調用,因爲它之前沒有做任何事情。我把它放回去,drawRect正在射擊。嘆。感謝您的幫助。 – dugla 2009-10-04 16:20:15