您的代碼;你的設計決定。這裏沒有評論。
你應該在ViewController中有你的模型聲明。真正。這就是MVC的工作原理。
參考UIView
中的數據DOES break MVC。你的視圖實例將不再是獨立的。解耦視圖和模型是MVC的主要觀點之一,你可能會用這種設計來打破它。
你能做些什麼呢?
擴展@ Paulw11的評論,在您的視圖控制器,你可以聲明看起來像這樣的方法:
func movePiece(somePiece : Piece, toSquare : Square) {
let pieceID = somePiece.id //I am just assuming the models structures
let pieceImageView = self.pieceImageViewFromID(id) //Assume that this method returns the reference of the image view. Assume that I am just working UIKit here.
let fromPoint : CGPoint = somePiece.origin
let toPoint : CGPoint = toSquare.coordinates
self.animateView(pieceImageView, fromPoint:fromPoint, toPoint:toPoint)
}
注意,在這個設計中,視圖不持有任何模型引用;視圖控制器將負責設置其狀態並引入相關的動畫。
如果您正在覆蓋drawRect:
,那麼,它被調用,你應該叫setNeedsDisplay
更新變化。視圖控制器可能會調用,或者您可以添加屬性觀察器來根據屬性更改重繪自己。這種情況的一個例子是:
class SillyView : UIView {
var drawPonies : Bool = false {
didSet {
if oldValue != drawPonies {
self.setNeedsDisplay()
}
}
}
override func drawRect(rect: CGRect) {
if drawPonies {
self.drawGoodLookingPony()
} else {
self.drawSomeOtherAnimal()
}
}
func drawGoodLookingPony() {
//Draw a good looking pony here
}
func drawSomeOtherAnimal() {
//Draw Something else
}
}
如果您的視圖控制器決定提請小馬所有你需要做的是,讓SillyView
的基準,並設置drawPonies
到true
。
self.sillyView.drawPonies = true
你是不是路過此地你的數據模型,但配置信息重要的部分,這將有助於該視圖重繪自身。
您的視圖控制器應發送事件或移動到您的董事會視圖。像'movePiece(somePiece,fromSquare,toSquare)''。然後,您的觀點將適當反映這些變化;動畫或任何動畫。視圖控制器不會調用setNeedsDisplay或drawRect;視圖會根據視圖控制器的需要調用這些視圖 – Paulw11