2016-11-16 69 views
3

在Objective C中很容易改變基於使用強制轉換爲(UIImageView*)一個標籤的UIView的圖像 - 是這樣的:變化的UIView

[ (UIImageView*) [self.view viewWithTag:n+1] setImage:[UIImage imageNamed:@"bb.png"]]; 

我一直試圖找到一個最新的例子,將在Swift 3中做同樣的事情。我終於來到了解決方案 - 你需要使用作爲!關鍵字和可選投到UIImageView?。如果你需要做到這一點 - 這裏的一些工作代碼:

// SWIFT3 change UIView based on viewWithTag (johnrpenner, toronto) 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    var n : Int = 0 
    for i in stride(from:7, to:-1, by:-1) { 
     for j in 0...7 { 
      n = i*8+j 

      let sqImageView = UIImageView(image: UIImage(named: "wp.png")) 
      sqImageView.tag = n+1 

      sqImageView.frame.origin.x = (CGFloat(j) * cellX + xStartAdj) 
      sqImageView.frame.origin.y = ((CGFloat(7-i) * cellY) + yStartAdj) 

      view.addSubview(sqImageView) 
      } 
     } 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
//func touchesBegan(touches: Set<UITouch>, with event: UIEvent?) 
{ 
    if let touch = touches.first { 
     let touchPos = touch.location(in: self.view) //swift3 
     let touchSQ : Int = coordToSQ(touchPoint:touchPos) 

     // change UIView.image based on viewWithTag 
     if var findView : UIImageView = view.viewWithTag(touchSQ+1) as! UIImageView? { findView.image = UIImage(named: "bp.png")! }  
    } 
} 

任何如何 - 它花了幾個小時圖了這一點,一切都在那裏是斯威夫特2或目標C - 想到了一個斯威夫特3例子可能有用。

乾杯! john p

回答

2

就是這樣。

if let findView = self.view.viewWithTag(touchSQ+1) as? UIImageView { 
    findView.image = UIImage(named: "bp.png") 
} 
+0

它與VAR合作,雖然咱們是更好的形式。 – johnrpenner

+0

如果你沒有改變這個值,那麼它就是使用'let' :)的電池 –

+0

它與var一起工作,儘管let是更好的形式。 if-let檢測並不是真正的問題 - 這裏有很多例子 - 不明顯的部分是,爲了改變uiview,首先必須將其作爲!的UIImageView? (或使用let時沒有?)。你可以改變uiview.hidden和一切,但圖像沒有as? wouldnt工作, – johnrpenner

0

thx nirav - using let .. as? UIImageView ..是很好的答案。

這可能是一個有用的功能:

func setImageView(byTag:Int, toImageNamed:String) 
{ 
    if let findView = self.view.viewWithTag(byTag) as? UIImageView {findView.image = UIImage(named: toImageNamed)} 
    return 
} 
+0

你能告訴我我的答案和你的區別是什麼,你剛剛通過添加函數寫了同樣的東西嗎? –