我有我的第一個應用程序運行在iphone/ipad上,使用核心圖形和手勢識別器(不是OpenGL或觸摸事件)。應用程序,視圖和控制器是使用IB設置的。這只是ViewController中的一個視圖。我添加了CG調用來繪製到CG上下文中。手勢被添加到視圖中,但在視圖控制器中處理。視圖控制器使用訪問器來更改決定視圖中繪製內容的變量。計算(即模型)嵌入在視圖中。該應用程序工作得很好,但我想添加功能,例如發送電子郵件並保存已繪製的內容。 (我知道我需要其他圖形上下文)。如何繪製請求/ rcv模型新鮮計算的圖像?
傳統觀點告訴我需要使用MVC範式,這意味着將模型從視圖中分解到它自己的對象中。所以,我重新考慮了代碼。我爲模型手動添加了一個NSObject,它很好地包含了數據和所需的方法。沒有編譯錯誤或警告。
現在,當視圖的drawRect被觸發時,我想通過控制器從模型中獲取更新的圖像。在我期望圖像被返回的關鍵位置,NULL返回。我可能只是沒有我的對象引用是正確的,但我太困惑了,不能去掉霧,我正在一個真空中工作,所以我爭取你的幫助。謝謝閱讀。
內容和QUESTION
視圖控制器總是具有能夠傳遞到模型的當前參數。 該模型可以計算給定這些參數的位圖圖像。 我很確定我有那麼多。
我的問題是(措辭各種不同的方式):
什麼是讓從模型到視圖圖像(通過控制器:^)的最佳方式 查看該如何將消息發送到視圖控制器發起請求?
模型如何將圖像返回到控制器? 我想我只是通過一個CGContextRef通過你推薦的任何鏈。
關於我:我是OOP,Objective-C,Xcode和IB的新手。我幾次觀看了斯坦福大部分的講座,研究了Goldstein的傻瓜書籍,搜索了蘋果文檔。新手很難從這些來源收集適當的答案。我只需要更多的「經驗」。我很綠,我甚至不知道如何引用視圖控制器,除了在視圖的界面定義中包含「myViewController * viewController」!我一直在谷歌搜索和閱讀類似的問題在這裏Stackoverflow的答案。我不能beleeve我沒有找到任何appropos。我希望有一兩個實際的原則作爲我的指導。
請指教。
這與reference-to-model-data-in-a-view-instance-drawrect類似,沒有得到充分滿足。
我再次更詳細地閱讀了您的問題,並且您說:「我假設我只是通過您推薦的任何鏈來傳遞CGContextRef。」不要這樣做,如果您發送圖像,請傳遞CGImageRef。如果您要發送點,請使用[NSValue valueWithCGPoint:]並將值存儲在數組中以傳遞給視圖。如果你需要繪製圖像和點列表等幾個不同的功能,你應該爲每一個創建一個不同的UIView子類,並使用你的視圖控制器在合適的時候切換它們。 – Rich 2011-01-24 15:41:07
你不應該使用CGContext ref來傳遞數據的原因是因爲它是視圖體系結構的一部分,並且由於程序的不同部分沒有分開,所以這打破了MVC模式。實質上,模型,視圖和控制器都應該能夠單獨運行。唯一的例外是視圖控制器可以知道模型和視圖,但它仍然不應該與任何一個綁定得太緊密(也就是說,你只需要對零件進行小的修改(如果有的話)一組相關的類),使其在另一個應用程序中工作)。 – Rich 2011-01-24 15:47:12
好的。我在原來的聲明中寫了錯誤的東西。我正試圖在MVC版本的程序中使用CGImageRef。也許我會稍後編輯它。我瞭解那裏的差異。這真的會被扭曲,將CGContextRef從視圖傳遞到模型(以某種方式),並要求模型進入該模型! :^)對不起,困惑。工作完成後我會回來的。謝謝。 – jem 2011-01-24 17:11:41