在Swift中更新UIImageView

时间:2016-01-31 21:48:22

标签: swift uiview swift2 setneedsdisplay

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

我在下面有一个功能(A)绘制一个模拟村庄(每个矩形代表村里的一个房子)。我的问题是我有另一个功能(B - 除了下面的小部分之外没有显示)(按下按钮开始),它改变了驱动村庄外观的底层阵列。它在for循环中这样做。所以在函数B中,我运行100次迭代,并且在每次迭代时,我调用函数(A)来重绘村庄。问题是app只在第100个循环结束时绘制了村庄。我已经尝试了setNeedsDisplay等,没有运气,我希望在每次迭代时都能看到村庄,这样当矩形从iter变为iter时,它会创建一些动画。

摘自功能B ......

for iIter... 100 times {
   drawVillage()
   imageView.setNeedsDisplay() <-- TRYING TO REFRESH HERE
}

功能A ......

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

}

0 个答案:

没有答案