2015-03-08 28 views
1

我一直在試圖建立阻力和使用本指南http://www.freshconsulting.com/create-drag-and-drop-uitableview-swift/嘗試創建拖放到tableview。 SWIFT

這是我的viewDidLoad代碼

let longpress = UILongPressGestureRecognizer(target: self, action: "longPressGestureRecognized:") 

     longpress.minimumPressDuration = 1.0 

     table.addGestureRecognizer(longpress) 

而且FUNC

func longPressGestureRecognized(gestureRecognizer: UILongPressGestureRecognizer) { 


      func snapshopOfCell(inputView: UIView) -> UIView { 
      UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, false, 0.0) 
      inputView.layer.renderInContext(UIGraphicsGetCurrentContext()) 
      let image = UIGraphicsGetImageFromCurrentImageContext() as UIImage 
      UIGraphicsEndImageContext() 
      let cellSnapshot : UIView = UIImageView(image: image) 
      cellSnapshot.layer.masksToBounds = false 
      cellSnapshot.layer.cornerRadius = 0.0 
      cellSnapshot.layer.shadowOffset = CGSizeMake(-5.0, 0.0) 
      cellSnapshot.layer.shadowRadius = 5.0 
      cellSnapshot.layer.shadowOpacity = 0.4 
      return cellSnapshot 
     } 

     let longPress = gestureRecognizer as UILongPressGestureRecognizer 

     let state = longPress.state 

     var locationInView = longPress.locationInView(table) 

     var indexPath = table.indexPathForRowAtPoint(locationInView) 

     struct My { 

      static var cellSnapshot : UIView? = nil 

     } 
     struct Path { 

      static var initialIndexPath : NSIndexPath? = nil 

     } 

     switch state { 
     case UIGestureRecognizerState.Began: 
      if indexPath != nil { 
       Path.initialIndexPath = indexPath 
       let cell = table.cellForRowAtIndexPath(indexPath!) as UITableViewCell! 
       My.cellSnapshot = snapshopOfCell(cell) 
       var center = cell.center 

       My.cellSnapshot!.center = center 

       My.cellSnapshot!.alpha = 0.0 

       table.addSubview(My.cellSnapshot!) 

       UIView.animateWithDuration(0.25, animations: {() -> Void in 
        center.y = locationInView.y 

        My.cellSnapshot!.center = center 

        My.cellSnapshot!.transform = CGAffineTransformMakeScale(1.05, 1.05) 

        My.cellSnapshot!.alpha = 0.98 

        cell.alpha = 0.0 

        }, completion: { (finished) -> Void in 

         if finished { 

          cell.hidden = true 


         } 



       }) 



      } 


     case UIGestureRecognizerState.Changed: 
      var center = My.cellSnapshot!.center 
      center.y = locationInView.y 
      My.cellSnapshot!.center = center 
      if ((indexPath != nil) && (indexPath != Path.initialIndexPath)) { 
       swap(&cellContent[indexPath!.row], &cellContent[Path.initialIndexPath!.row]) 
       table.moveRowAtIndexPath(Path.initialIndexPath!, toIndexPath: indexPath!) 
       Path.initialIndexPath = indexPath 
      } 

     default: 
      let cell = table.cellForRowAtIndexPath(Path.initialIndexPath!) as UITableViewCell! 
      cell.hidden = false 
      cell.alpha = 0.0 
      UIView.animateWithDuration(0.25, animations: {() -> Void in 
       My.cellSnapshot!.center = cell.center 
       My.cellSnapshot!.transform = CGAffineTransformIdentity 
       My.cellSnapshot!.alpha = 0.0 
       cell.alpha = 1.0 
       }, completion: { (finished) -> Void in 
        if finished { 
         Path.initialIndexPath = nil 
         My.cellSnapshot!.removeFromSuperview() 
         My.cellSnapshot = nil 


        } 
      }) 

     } 

} 

的問題是,它崩潰下降當長按一個單元格時。

錯誤代碼:longPressGestureRecognized:]:無法識別的選擇發送到實例0x79a3b110'

其他一切工作正常,如刪除單元格內容等

提前感謝!

回答

0

請再次檢查你的功能「func longPressGestureRecognized(gestureRecognizer:UILongPressGestureRecognizer)」 我測試了你的代碼,一切工作正常。我可能會懷疑你正在把它放在其他功能中。