2017-01-10 12 views
0

私はチュートリアルをオンラインで行っており、UIImageViewにタッチ検出機能を追加しようとしています。私はこれがジェスチャー認識プログラムで実行できることを認識していますが、私は別の問題を抱えており、どのように尋ねるのか分かりません。Swift - UIImageViewにタッチを追加

基本的に、imageViewのフレームから初期化されたオーバーレイUIButtonを追加しました。しかし、ナビゲーションバーのためにフレームを64ピクセル下に移動する必要があります。私のimageViewはストーリーボードから追加されますが、UIButtonがプログラムによって追加されています。

手動で64ピクセルを追加しないと、これを行う方法はありますか?これは大したことではありませんが、画像のフレームが印刷されているときは(10, 10, 355, 450)UIButtonのフレームは(10, 74, 355, 450)なので、ちょっと切ってしまいます。

明らかに私は、なぜコントローラがサブプログラムをプログラムで追加するときにナビゲーションバーのサイズを考慮しないのだろうと思っていますか?ストーリーボードからサブビューを追加するときにこれをうまく処理しているようです。

Without adding 64px

overlay = UIButton(frame: imageView.frame) 
    overlay.backgroundColor = UIColor.red 
    overlay.addTarget(self, action: #selector(imageViewTapped), for: .touchUpInside) 
    view.addSubview(overlay) 

With 64px added - fits perfectly

overlay = UIButton(frame: imageView.frame.offsetBy(dx: 0, dy: 64)) 
    overlay.backgroundColor = UIColor.red 
    overlay.addTarget(self, action: #selector(imageViewTapped), for: .touchUpInside) 
    view.addSubview(overlay) 
+0

UIViewControllerの属性インスペクタのキャプチャを表示できますか? – nynohu

+0

申し訳ありません今は2つ以上のリンクを追加することはできませんが、すべてがデフォルトの設定になっています:推測、ステータスバー:推測、トップバー:推測とボトムバー:推測。 –

+0

あなたはself.view.frameをanswerで与えられたように使用できます。答えを確認してください。 –

答えて

2

あなたは、画像表示のボタンを追加することができます。

はこれを試してみてください。下記のよう

let overlay = UIButton(frame: imageView.bounds) 
     imageView.isUserInteractionEnabled = true 
     overlay.backgroundColor = UIColor.red.withAlphaComponent(0.3) 
     overlay.addTarget(self, action: #selector(imageViewTapped), for: .touchUpInside) 
     imageView.addSubview(overlay) 
0

Opaque Navigation BarにごUIViewControllerのnavigationbarを設定します。ナビゲーションバーの下に表示されます。

enter image description here

0

あなたは同じもののためUITapGestureRecognizerを使用することができます。

let bg = UIImageView(image: UIImage(named: "Home")) 
    bg.frame = self.view.frame 
    self.view.addSubview(bg) 

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(SecondViewController.onTapScreen)) 
    bg.isUserInteractionEnabled = true 
    bg.addGestureRecognizer(tapRecognizer) 

ハンドルタップイベントは、それが複数のコントロールを避けることができるので、あなたはまた、ボタンを使用する必要はありません。このところで

func onTapScreen() { 
     // Handle touch here. 
    } 

以下で示される通り。

関連する問題