2016年10月18日 星期二

swift3 Day4 方塊移動動畫-2

把第三天的方塊改成可以順時針以及逆時針旋轉,



我先宣告一個變數記錄現在位置,用以推斷下個要走的位置



//起始為0



var loc=0



先加入兩個按紐,



    @IBAction func clockwise(_ sender: UIButton) {   }



    @IBAction func counterclockwise(_ sender: UIButton) {    }



 



現在執行完畢之後畫面:





接下來填寫內容,



//順時針按鈕



@IBAction func clockwise(_ sender: UIButton) {



//loc是現在位置,在我們進來順時針時,要先+1,讓他知道下一個位置



        if(loc<3){



            self.loc+=1



        }else{



            self.loc=0



        }



        turnRight(one, two, three, four)



    }



 



//逆時針按鈕



    @IBAction func counterclockwise(_ sender: UIButton) {



        if(loc<0){



            self.loc=3



        }else{



            self.loc-=1



        }



        turnRight(one, two, three, four)



    }



    



//我原本沒有想要做逆時針,就取名叫右轉,現在懶得改回去



//順序是以右轉(順時針)來看



    func turnRight( _ a:UILabel , _ b:UILabel, _ c:UILabel, _ d:UILabel) {



        UIView.animate(withDuration: 0.9, delay: 0.1, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, animations: {



            //初始位置0,如上面的大圖



           //順時針轉動一格,變為1,以此類推



            switch self.loc{



            case 0:



                a.transform = CGAffineTransform(translationX: 0, y: 0)



                b.transform = CGAffineTransform(translationX: 0, y: 0)



                c.transform = CGAffineTransform(translationX: 0, y: 0)



                d.transform = CGAffineTransform(translationX: 0, y: 0)



            case 1:



                a.transform = CGAffineTransform(translationX: 40, y: 0)



                b.transform = CGAffineTransform(translationX: 0, y: -40)



                c.transform = CGAffineTransform(translationX: -40, y: 0)



                d.transform = CGAffineTransform(translationX: 0, y: 40)



            case 2:



                a.transform = CGAffineTransform(translationX: 40, y: 40)



                b.transform = CGAffineTransform(translationX: 40, y: -40)



                c.transform = CGAffineTransform(translationX: -40, y: -40)



                d.transform = CGAffineTransform(translationX: -40, y: 40)



            default:



                a.transform = CGAffineTransform(translationX: 0, y: 40)



                b.transform = CGAffineTransform(translationX: 40, y: 0)



                c.transform = CGAffineTransform(translationX: 0, y: -40)



                d.transform = CGAffineTransform(translationX: -40, y: 0)



            }



            }, completion: nil)



    }



 



兩天的成果:







2016/11/1



這種移動方法一對的位置都是以原點來算!!



例如:



a.transform = CGAffineTransform(translationX: 0, y: 40)



a.transform = CGAffineTransform(translationX: 0, y: 20)



移動了兩次後,只會從最一開始的地方(x:0, y:0)往 y+20移過去



也就是說,會看到他的 y 變化:0 -> 40 -> 20



而不是一直往下移動




0 意見:

張貼留言