在Swift中更新UIImageView

在Swift中更新UIImageView,swift,uiview,swift2,setneedsdisplay,Swift,Uiview,Swift2,Setneedsdisplay,这里是新手程序员。我试图模拟一个村庄内家庭之间的互动 我在下面有一个函数(a),它绘制了一个模拟村庄(每个矩形代表村庄中的一所房子)。我遇到的问题是,我有另一个功能(B-除下面的小部分外未显示)(通过按下按钮启动),它可以更改驱动村庄外观的底层阵列。它以for循环的方式执行此操作。所以在函数B中,我运行100次迭代,每次迭代时,我调用函数(A)重新绘制村庄。问题是,该应用程序只在第100个循环结束时绘制村庄。我尝试过setNeedsDisplay等,但运气不好,我希望看到在每次迭代中绘制村庄,以

这里是新手程序员。我试图模拟一个村庄内家庭之间的互动

我在下面有一个函数(a),它绘制了一个模拟村庄(每个矩形代表村庄中的一所房子)。我遇到的问题是,我有另一个功能(B-除下面的小部分外未显示)(通过按下按钮启动),它可以更改驱动村庄外观的底层阵列。它以for循环的方式执行此操作。所以在函数B中,我运行100次迭代,每次迭代时,我调用函数(A)重新绘制村庄。问题是,该应用程序只在第100个循环结束时绘制村庄。我尝试过setNeedsDisplay等,但运气不好,我希望看到在每次迭代中绘制村庄,以便在矩形从iter变为iter时创建一点动画

摘自功能B

for iIter... 100 times {
   drawVillage()
   imageView.setNeedsDisplay() <-- TRYING TO REFRESH HERE
}
对于iIter。。。一百次{
拉瓦村()

imageView.setNeedsDisplay()仍然没有找到解决方案-有人可以帮忙吗?谢谢。我编辑了这篇文章,希望能让它更容易理解。请有人帮忙!UIView.setNeedsDisplay只是通知系统应该重新绘制您的视图。此时它不会重新绘制视图,而是在下一个更新周期中。我猜您的循环完成,然后iOS会重新绘制您的视图视图已将所有setNeedDisplay请求集中在一起。我想您可能需要类似于[UIView animateWithDuration:]谢谢-我想,我来自一个Visual Basic世界,我正在与线程等进行斗争。在Visual Basic中,如果我告诉程序绘制一些东西,然后我调用该函数,它就会重新绘制。难道没有一种方法可以在我希望应用程序这样做时强制重新绘制吗?
func drawVillage() {

    let xSize: Int = Int (gxRes / gxHomes); let ySize: Int = Int (gyRes / gyHomes)
    let xRes = Int(gxHomes * xSize); let yRes = Int(gyHomes * ySize)

    UIGraphicsBeginImageContextWithOptions(CGSize(width: xRes, height: yRes), false, 0)
    let context = UIGraphicsGetCurrentContext()

    var iStatus: Int

    for var yHome: Int = 1; yHome <= gyHomes; ++yHome {
        for var xHome: Int = 1; xHome <= gxHomes; ++xHome {

            var rectangle = CGRect(x: (xHome - 1) * xSize, y: (yHome - 1) * ySize, width: xSize, height: ySize)

            iStatus = gaVillageStatus[xHome][yHome]
            if iStatus == 0 {
                CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor)
            } else if iStatus == 1 {
                CGContextSetFillColorWithColor(context, UIColor.greenColor().CGColor)
            } else if iStatus == 2 {
                CGContextSetFillColorWithColor(context, UIColor.blueColor().CGColor)
            } else if iStatus == 3 {
                CGContextSetFillColorWithColor(context, UIColor.redColor().CGColor)
            }

            CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor)
            CGContextSetLineWidth(context, 1)

            CGContextAddRect(context, rectangle)
            CGContextDrawPath(context, .FillStroke)

        }
    }

    var img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    imageView.image = img

}