2015-10-21 2 views
0

Я следую за это руководство на жест приводом приложений, http://www.raywenderlich.com/77974/making-a-gesture-driven-to-do-list-app-like-clear-in-swift-part-1Не может вызвать инициализатор для типа UIPanGestureRecognizer

однако, когда я пришел, чтобы реализовать распознаватель я получаю ошибку

Cannot invoke initializer for type 'UIPanGestureRecognizer' with an argument list of type '(target: NSObject ->() -> TableViewCell, action: String)'

Swift версии: Apple Swift версия 2.0 (swiftlang-700.0.59 clang-700.0.72) Цель: x86_64-apple-darwin14.5.0

import UIKit 
import QuartzCore 

class TableViewCell: UITableViewCell { 

    var originalCenter = CGPoint() 
    var deleteOnDragRelease = false 

    let gradientLayer = CAGradientLayer() 

    required init(coder aDecoder: NSCoder) { 
     fatalError("NSCoding not supported") 
    } 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 

     // gradient layer for cell 
     gradientLayer.frame = bounds 
     let color1 = UIColor(white: 1.0, alpha: 0.2).CGColor as CGColorRef 
     let color2 = UIColor(white: 1.0, alpha: 0.1).CGColor as CGColorRef 
     let color3 = UIColor.clearColor().CGColor as CGColorRef 
     let color4 = UIColor(white: 0.0, alpha: 0.1).CGColor as CGColorRef 
     gradientLayer.colors = [color1, color2, color3, color4] 
     gradientLayer.locations = [0.0, 0.01, 0.95, 1.0] 
     layer.insertSublayer(gradientLayer, atIndex: 0) 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     gradientLayer.frame = bounds 
    } 

    // add a pan recognizer 
    var recognizer = UIPanGestureRecognizer(target: self, action: "handlePan:") 
    recognizer.delegate = self 
    addGestureRecognizer(recognizer) 

    //MARK: - horizontal pan gesture methods 
    func handlePan(recognizer: UIPanGestureRecognizer) { 
     // 1 
     if recognizer.state == .Began { 
      // when the gesture begins, record the current center location 
      originalCenter = center 
     } 
     // 2 
     if recognizer.state == .Changed { 
      let translation = recognizer.translationInView(self) 
      center = CGPointMake(originalCenter.x + translation.x, originalCenter.y) 
      // has the user dragged the item far enough to initiate a delete/complete? 
      deleteOnDragRelease = frame.origin.x < -frame.size.width/2.0 
     } 
     // 3 
     if recognizer.state == .Ended { 
      // the frame this cell had before user dragged it 
      let originalFrame = CGRect(x: 0, y: frame.origin.y, 
       width: bounds.size.width, height: bounds.size.height) 
      if !deleteOnDragRelease { 
       // if the item is not being deleted, snap back to the original location 
       UIView.animateWithDuration(0.2, animations: {self.frame = originalFrame}) 
      } 
     } 
    } 
} 
+0

Не могли бы вы показать свой код о том, как вы его используете, поскольку я только что пробовал с кодом в этой ссылке, и он работал отлично. – Abhinav

+0

Установили ли вы цель как «себя»? – kabiroberai

+0

Спасибо за ответы, я вставил код. @kabiroberai да цель установлена ​​как «я». – reayd

ответ

1

// add a pan recogniser

С этого момента в вашем коде, вы пишете внутри тела класса, а не в конкретном методе.

В учебник состояния

Открыть TableViewCell.swift и добавьте следующий код в конце переопределенного метода инициализации:

Таким образом, вы, вероятно, следует сделать это. Вы ввели код в неправильном месте.

+0

Я не могу в это поверить. Большое спасибо jrturton. – reayd

Смежные вопросы