2016-11-16 23 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

你能告诉我我的答案和你的区别是什么,你刚刚通过添加函数写了同样的东西吗? –