【发布时间】:2016-04-05 11:23:08
【问题描述】:
好的,我要做的是更改某个图像的像素数据。我想使用每次循环作为进度条时向右移动的 UIView。但是,正在发生的事情是在计算过程中屏幕冻结,并且在计算完成之前没有任何反应。状态栏时钟也不会更新。有没有办法以某种方式将这些计算移到后台并仍然使用屏幕空间?
func lock() {
let lockView = UIImageView(image: self.photoBackgroundView.image!)
var progressBar = UIView(frame: CGRectMake(-self.view.width,0,self.view.width,20)
let increment = progressBar.width/self.photoBackgroundView.width
var password = self.textField.text!
if password == "" {
password = " "
}
var currentIndex = 0
let imageRect = CGRectMake(0, 0, self.photoBackgroundView.image!.size.width,self.photoBackgroundView.image!.size.height)
UIGraphicsBeginImageContext(self.photoBackgroundView.image!.size)
let context = UIGraphicsGetCurrentContext()
CGContextSaveGState(context)
CGContextDrawImage(context, imageRect, self.photoBackgroundView.image!.CGImage)
for x in 0...Int(self.photoBackgroundView.image!.size.width) {
print(x)
progressBar.frame.origin.x += (CGFloat(x) * increment)
self.view.addSubView(progressBar)
for y in 0...Int(self.photoBackgroundView.image!.size.height) {
let pointColor = lockView.layer.colorOfPoint(CGPoint(x: x, y: y))
if currentIndex == Array(password.characters).count {
currentIndex = 0
}
let red = encrypt(pointColor.components.red, passwordChar: Array(password.characters)[currentIndex], currentIndex: currentIndex, x: x, y: y)
currentIndex++
if currentIndex == Array(password.characters).count {
currentIndex = 0
}
let green = encrypt(pointColor.components.green, passwordChar: Array(password.characters)[currentIndex], currentIndex: currentIndex, x: x, y: y)
currentIndex++
if currentIndex == Array(password.characters).count {
currentIndex = 0
}
let blue = encrypt(pointColor.components.blue, passwordChar: Array(password.characters)[currentIndex], currentIndex: currentIndex, x: x, y: y)
currentIndex++
CGContextSetRGBFillColor(context, red, green, blue, pointColor.components.alpha)
CGContextFillRect(context, CGRectMake(CGFloat(x), CGFloat(y), 1, 1))
}
}
CGContextRestoreGState(context)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
self.photoBackgroundView.image = newImage
self.slideView.addSubview(photoBackgroundView)
self.view.addSubview(self.slideView)
}
【问题讨论】: