2017-04-02 16 views
2

このコードの目的は、UIViewを画面の特定の場所にアニメーション化することです。残念ながら、単にタップを登録していません。デリゲートを私のセットアップで何かに設定すると思いますか?どんな助けもありがとう!UIButton TapGestureRecognizerが起動しない

public class NoteCardView:UIView { 
internal var titleLabelTapGestureRecognizer: UITapGestureRecognizer? 
@IBInspectable var delegate: NoteCardViewDelegate? 

public func setup(positionX:CGFloat, positionY: CGFloat, view: UIView, cardValue: Int) { 
    self.titleLabelTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(NoteCardView.handleTitleLabelTap(_:))) 
    self.addGestureRecognizer(titleLabelTapGestureRecognizer!) 
} 

func handleTitleLabelTap(_ recognizer:UITapGestureRecognizer) { 
    self.delegate?.noteCardViewTitleLabelDidRecieveTap(self) 
} 
} 

public protocol NoteCardViewDelegate { 
func noteCardViewTitleLabelDidRecieveTap(_ view: NoteCardView!) -> Bool 
} 

extension MainViewController: NoteCardViewDelegate { 
func noteCardViewTitleLabelDidRecieveTap(_ view: NoteCardView!) -> Bool { 
    let card:NoteCardView = (view) 
    UIView.animate(withDuration: 0.5, delay: 0.0, options: UIViewAnimationOptions.curveEaseInOut, animations: { 

     card.titleLabel.leftAnchor.constraint(equalTo: card.titleLabel.leftAnchor, constant: (self.elementPlacement/4) + 20) 

     card.titleLabel.bottomAnchor.constraint(equalTo: card.titleLabel.bottomAnchor, constant: 100) 

    }, completion: { (finished: Bool) in 

     self.elementPlacement = (self.elementPlacement + 1) 
     card.titleLabelTapGestureRecognizer!.isEnabled = !(self.elementPlacement == 5) 
    }) 
    return true 
} 
} 
+0

'setup'メソッドはどこにありますか? – rmaddy

+0

あなたの質問にはどんなボタンがありますか?ボタンはありません。 – rmaddy

+0

@rmaddyの設定はView ControllerのviewDidLoad()で呼び出されます。また、NoteCardViewにサブビューとしてButtonを追加しています。私は、ボタンまたはノートカードのビューからタップジェスチャ認識機能を作成するかどうか分かりません。 –

答えて

1

ビューでuserInteractionを有効にする必要があります。

view.isUserInteractionEnabled = true 
+0

View Controllerでこれを行いました。まだ動作しませんでした。 –

+0

「noteCardViewTitleLabelDidRecieveTap」が呼び出されていませんか?それはとても変わったように見えますが、おそらくそれは呼び出されたかもしれませんが、内部のロジックは間違っています。 FUNCのnoteCardViewTitleLabelDidRecieveTap(_ gestureRecognizer:TapGestureRecognizer)、このいずれかを試してみてください - >ブール{ ガードしましょうgestureView = gestureRecognizer.view、 noteCardView = gestureViewなどを聞かせて? NoteCardView else {return} ... } –

0

はViewControllerをでviewDidAppearsetupメソッドを呼び出すようにしてください。

関連する問題