Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to iterate through functions with button press in Swift

Tags:

ios

swift

I'm learning swift and building an ARApp but can't seem to understand how to iterate through a few functions with every separate button press. I have created 3 func with animation built in and want to press the button once and funcAnimation#1 activate then tap button again to proceed to funcAnimation#2 and so forth.

@IBAction func nextAnimation(_ sender: UIButton) {
funcAnimation#1()
funcAnimation#2()
funcAnimation#3()
}

of course the problem here is that they all activate at once. I would like to iterate only on button press for each individual press. In addition I would also like to have a backButton that reverses the current animation to previous animation. I read in Apple's documentation that there is a addTarget method but I don't understand how it works or how to implement it. Please Help!

like image 758
Sam Avatar asked Jan 23 '19 04:01

Sam


2 Answers

Your code should like this :

// You can define this variable globally...
var counter = 0
@IBAction func nextAnimation(_ sender: UIButton) {
    if (counter == 0) {
        funcAnimation1()
        // Increase counter count by 1 and you can add this line to completion of animation.
       // You can also disable your button interaction until your animation gets complete and that way you can handle your UI
        count += 1
    }
    else if (counter == 1) {
        funcAnimation2()
         // Increase counter count by 1 and you can add this line to completion of animation.
        count += 1
    }
    else if (counter == 2) {
        funcAnimation3()
        // set your counter to 0 again to loop through your animation.
        counter = 0
    }
}

Your Back Action should look like this:

@IBAction func backAnimation(_ sender: UIButton) {
    if (counter == 0) {
        funcAnimation1()
        // set your counter to 2 again to loop through your animation.
        count = 2
    }
    else if (counter == 1) {
        funcAnimation2()
        // decrease counter count by 1 and you can add this line to completion of animation.
        // You can also disable your button interaction until your animation gets complete and that way you can handle your UI
        count -= 1
    }
    else if (counter == 2) {
        funcAnimation3()
       // decrease counter count by 1 and you can add this line to completion of animation.
        count -= 1
    }
}
like image 113
Jarvis The Avenger Avatar answered Oct 19 '22 04:10

Jarvis The Avenger


Another way!

Just set tag of button 1 (Ex. btnObj.tag=1)

And manage method(s) in action of the button like

My suggestion is also manage flag for animation like if 1st animation is in process then 2nd will be waiting for finish and after finishing 1st animation, button will be clicked so your animation will not mismatch.

var isAnimated = false;
@IBAction func myAnimationMethod(_ sender: UIButton) {
    if isAnimated {return} // Or display appropriate message by alert
    if (sender.tag == 1) {
        isAnimated=true
        funcAnimation1(...Your Code... After finish to set isAnimated=false)
        sender.tag = 2 
    }
    else if (sender.tag  == 2) {
       isAnimated=true
        funcAnimation2(...Your Code... After finish to set isAnimated=false)
        sender.tag = 3 
    }
    else if (sender.tag  == 3) {
         isAnimated=true
        funcAnimation3(...Your Code... After finish to set isAnimated=false)
        sender.tag = 1 
    }
}
like image 1
Govaadiyo Avatar answered Oct 19 '22 02:10

Govaadiyo