ViewController被解除后的函数调用

时间:2015-03-01 15:34:24

标签: swift

我有一个功能,可以一次又一次地调用自己来进行简单的小幻灯片演示。

func animateImage(no:Int)
    {
        println("ANIMATE")
        var imgNumber:Int = no
        let t:NSTimeInterval = 1;
        let t1:NSTimeInterval = 0;

        let url = NSURL(string: self.itemss[imgNumber][0])
        let data = NSData(contentsOfURL: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check

        imgView!.alpha = 0.4
        self.imgView?.image = UIImage(data: data!)

        //code to animate bg with delay 2 and after completion it recursively calling animateImage method
        UIView.animateWithDuration(2.0, delay: 0, options:UIViewAnimationOptions.CurveEaseOut, animations: {() in
            self.imgView!.alpha = 1.0;
            },
            completion: {(Bool) in
                imgNumber++;
                if imgNumber>self.itemss.count-1  //only for 4 image
                {
                    imgNumber = 0
                }
                self.animateImage(imgNumber);
        })
    }

我遇到的问题是func似乎继续调用,当我关闭视图控制器时似乎没有停止?为什么在视图控制器被解除后,此函数继续调用。

@IBAction func dismissMe(sender: AnyObject) {
        if((self.presentingViewController) != nil){
            self.dismissViewControllerAnimated(false, completion: nil)
            println("done")
        }
    }

1 个答案:

答案 0 :(得分:1)

在取消视图控制器之后继续调用函数的原因是因为没有逻辑可以阻止它在被解除后停止调用自身。

一个被解雇的视图控制器应该停止拥有一个父视图控制器,所以我们可以通过检查方法顶部是否有一个父视图控制器来结束这个循环:

if self.parentViewController == nil {
    return;
}

如果这是你的方法做的第一件事,那么如果视图控制器仍然有一个父方法,那么该方法应该只继续执行(并将另一个调用与自己对齐)。