首先,我刚刚开始研究swift。
我正在for循环中创建图像视图,并尝试逐个显示它们并有一些延迟。我试图在viewDidAppear函数中实现这一点,但是所有的图像视图都显示在一起,没有任何延迟,即使我使用下面的函数:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
var i = 1
var backgroundQueue:dispatch_queue_t = dispatch_queue_create("SerialQueue", DISPATCH_QUEUE_SERIAL)
for award in (awards){
//dispatch_async(backgroundQueue, { () -> () in
var awardView = AwardView(imageName: award, sideLength: awardSize)
var pointX: CGFloat = xOffset + CGFloat(i-1) * (awardSize + COIN_MARGIN)
var pointY: CGFloat = yOffset
awardView.center = CGPointMake( pointX, pointY)
//dispatch_async(dispatch_get_main_queue(), { () -> () in
self.pointsContainerView.addSubview(awardView)
audioController.playEffect(SOUND_DING)
//})
//});
i++
}
我不确定我是否正在尝试以正确的功能(viewDidAppear)执行此操作。
提前感谢您的帮助。
答案 0 :(得分:1)
我认为你想按顺序加载子视图。这会在后台串行运行线程,一旦它获得UIView它更新屏幕并在加载下一个UIView之前等待一秒钟。 您可以尝试这种方式,我希望它有所帮助
var awards:NSArray=NSArray(objects: "1.jpg","2.jpg","3.jpg")
var x:CGFloat=10.00
var y:CGFloat=100.00
var backgroundQueue:dispatch_queue_t = dispatch_queue_create("SerialQueue", DISPATCH_QUEUE_SERIAL)
for award in awards{
dispatch_async(backgroundQueue, { () -> () in
// do some task
dispatch_async(dispatch_get_main_queue(), { () -> () in
var image:UIImage=UIImage(named: award as String)!
var awardView :UIImageView = UIImageView(image:image)
awardView.frame=CGRectMake(x, y, 300, 400);
self.view.addSubview(awardView);
x=x+310.00;
})
sleep(1);
});
}