2016-05-21 6 views
-1

基本的な考え方は、私は、ユーザーがいない画面上の任意の場所に、UIViewの内のどこかをタップすると、音声ファイルを再生したいテキストラベルやボタンのコンテンツを作成するために、別のページに移動したいということです。画面をタップした場所に何かを作成していますか?スウィフト

  1. 画面上をタップして、感謝されるだろう、私は正しい方向に指摘取得するためにも、いくつかの擬似コード作成
  2. 事はあなたが

をタップしていたのUIViewに表示何かを作成します。

+1

次の2つを頼みます別のものS:あなたは、ユーザータップした後に別のページに行くように依頼フレーズの最初の、そしてあなたは、ユーザーがタップした同じビューでタップした結果を表示するように頼むあなたのリストの第三のポイントインチあなたは本当に何をしたいのか分かりませんが、私はそのフレーズに従いました。 –

答えて

1

あなたのViewControllerにTapGestureRecognizerを入れて、あなたの関数にそのviewTappedアクションを接続します。ジェスチャ認識プログラムはViewControllerによって所有されているので、画面上のタップポイントがターゲットビュー内にあるかどうかを検出する必要があります。

開始コードスニペット:
self.viewはViewControllerのビューです。
self.targetViewのViewController内のターゲット図です。

我々は UILabelが含まれている以下の UIViewで始まる
@IBAction func viewTapped(tapGestureRecognizer: UITapGestureRecognizer) { 
    // detect the tapped view 
    let loc = tapGestureRecognizer.locationInView(self.view) 

    if (CGRectContainsPoint(self.targetView.frame, loc)) { 
     // the target view was tapped 
    } 
} 
1

class Controller1: UIViewController { 

    @IBOutlet weak var discCoverView: UIView! 
    @IBOutlet weak var listenToMeLabel: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let discoCoverViewGesture = UITapGestureRecognizer(target:self, action:#selector(Controller1.discoCoverViewTap(_:))) 
     self.discCoverView.addGestureRecognizer(discoCoverViewGesture) 
    } 

    func discoCoverViewTap(recognizer: UITapGestureRecognizer) { 
     // detect the location tapped by user 
     let tapLocation = tapGestureRecognizer.locationInView(self.discCoverView) 
     if self.listenToMeLabel.frame.contains(tapLocation) { 
      // user tap the listenToMeLabel 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let controller2 = storyboard.instantiateViewControllerWithIdentifier("controller2") as Controller2 
      controller2.songTitle = self.listenToMeLabel.text 
      self.presentViewController(controller2, animated: true, completion: nil) 
     } 
    } 
} 

コントローラ2が使用できます

import AVFoundation 
class Controller2: UIViewController { 

     @IBOutlet weak var listenToMeBtn: UIButton! 
     var songTitle: String! = "no title" 

     override func viewDidAppear(animated: Bool) { 
      super.viewDidAppear(animated) 
      listenToMeBtn.setTitle(songTitle, forState: UIControlState.Normal) 
      listenToMeBtn.addTarget(self, action: #selector(Controller2.listenToMeBtnTap(_:)), forControlEvents: UIControlEvents.TouchUpInside) 
      listenToMeBtn.setNeedsLayout() 
     } 

     func listenToMeBtnTap(sender:UIButton) { 
      print ("click \(sender.titleForState(UIControlState.Normal))") 
      let url = NSBundle.mainBundle().URLForResource(songTitle, withExtension: "mp3") 
      if (url == nil) { 
      print("Could not find song file: \(songTitle)") 
      return 
      } 
      do { backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: url!, fileTypeHint: nil) } 
      catch let error as NSError { print(error.description) } 

      if let player = backgroundMusicPlayer { 
      player.volume = 0.7 
      player.prepareToPlay() 
      player.play() 
      } 
     } 
} 
1

最も簡単な方法:

class ViewController: UIViewController { 
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    for touch in touches { 
     let location = touch.locationInView(self.view) 
     let newView = UIView(frame: CGRectMake(location.x, location.y, 100,100) 
     newView.backgroundColor = UIColor.redColor() 
     self.view.addSubview(newView) 
    } 
} 
関連する問題