2017-07-31 111 views
0

我正在創建一個按鈕編程和CGAffineTransform不起作用在我的項目中,當添加在addTarget,爲什麼?Swift 3 - CGAffineTransform不起作用

編輯:

func createButtonPuzzle(id: Int) { 

    for i in 1...14 { 

      let btnButton = UIButton(type: .roundedRect) 
      btnButton.frame = CGRect(x: self.view.frame.size.width/2, y: self.view.frame.size.height/2, width: 100, height: 100) 
      btnButton.backgroundColor = .blue 
      btnButton.setTitle("iButton", for: .normal) 
      btnButton.addTarget(self, action: #selector(moveButton(sender:)), for: .touchUpInside) 

      view.addSubview(btnButton) 
    } 
} 


func moveButton(sender: UIButton) { 

    if sender.tag == 1 { 

     if sender.transform == CGAffineTransform.identity { 

      UIView.animate(withDuration: 0.5, animations: 
      sender.transform = CGAffineTransform(translationX: 50, y: 100) 

      }) 
     }     
    } 
} 
+0

是使用自動佈局或自動尺寸定位的看法?這可能不適用於自動佈局。 – Sulthan

+0

不使用自動佈局或自動調整,它已經工作,但現在不起作用! @Sulthan –

+0

你有沒有設置斷點?你知道它是否真的達到了轉變?爲什麼你需要'moveButton'的參數名? – dfd

回答

1

在功能上,而不是使用sender.transform,使用btnButton.transform,因爲你是超出範圍,這是造成的,發件人可能被解僱,這將導致動畫來解僱。

另一種選擇是牢固地保持對象:

let tappedButton : UIButton = sender 

然後用tappedButton

編輯

我的意思是這樣的:

func moveButton(sender: UIButton) { 

    if ((sender.tag == 1) && (sender == self.btnButton)) { 

     if self.btnButton.transform == CGAffineTransform.identity { 

      UIView.animate(withDuration: 0.5, animations: 
       self.btnButton.transform = CGAffineTransform(translationX: 50, y: 100) 

      }) 
     }     
    } 
} 

ED IT - 2

根據你的代碼有2個問題:

  1. 所有14個按鈕在另一個頂部堆疊1,這意味着按鈕14將最上面的按鈕,而不是按鈕1
  2. 您沒有設置標籤,然後在你的支票moveButton失敗:

    FUNC createButtonPuzzle(ID:智力){

    for i in 1...14 { 
    
         let btnButton = UIButton(type: .roundedRect) 
         btnButton.frame = CGRect(x: self.view.frame.size.width/2, y: self.view.frame.size.height/2, width: 100, height: 100) 
         btnButton.backgroundColor = .blue 
         btnButton.setTitle("iButton", for: .normal) 
         btnButton.addTarget(self, action: #selector(moveButton(sender:)), for: .touchUpInside) 
    
         **btnButton.tag = i // This is missing ** 
    
         view.addSubview(btnButton) 
    } 
    

    }

然後失敗: 如果sender.tag == 1 {

所以對它進行測試,看看它的工作,首先你需要要麼去從14到1並從1 .. < 2或將按鈕重新放置在不同的位置,以便它實際上可以工作。

然後將這些代碼會被設置在與標籤1按鈕將被挖掘,將工作

+0

我在另一個函數中創建了btnButton,並且我在btnButton @unkgd中添加了這個函數 –

+0

您是否檢查過實際上是否獲得了動畫?作爲@dfd建議?如果你確實到了那裏,並且一切似乎都沒問題,那麼將你的按鈕作爲數據成員添加到控制器中,並使用該引用,因爲這意味着它被忽略,因爲它有一個弱引用。 – unkgd

+0

是的,我檢查了,我添加數據到控制器,一切似乎OK @loggd –

相關問題