如何在swift上一个接一个地显示子视图

时间:2015-02-18 18:57:11

标签: ios swift imageview delay

首先,我刚刚开始研究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)执行此操作。

提前感谢您的帮助。

1 个答案:

答案 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);

    });

}