2016-05-05 6 views
0

"imageView"というオブジェクトがありますが、 "imageView"がクリックされたときに必ず "clicouCrosshair"という関数を呼び出す必要がありますが、機能しません。私はインターネット上で見つけたいくつかのチュートリアルを試しましたが、成功はありません。誰もがなぜ、どのように私はこれを解決することができます知っている?クリックしてUIImageView SWIFTが機能しない

私はGMSMapViewとして私のビューを使用しているので、問題だと思っています。 "prepareMap"関数の中で、 "UIImageView"が設定されています。

import UIKit 
import GoogleMaps 

class Maps_criarArea: UIViewController { 

    var projNome:String!; 
    var mapView:GMSMapView!; 

    var imageView:UIImageView!; 

    func clicouCrosshair(sender: AnyObject){ 
     print("CROSSHAIR"); 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad(); 


     GMSServices.provideAPIKey("AIzaSyB62KDZSGfbbN1IIVnlhewi4PpEZmxPJYM"); 


     let centerBR_lat = -15.30; 
     let centerBR_lng = -49.57; 

     let cameraP = GMSCameraPosition.cameraWithLatitude(centerBR_lat, longitude: centerBR_lng, zoom: 4); 
     mapView = GMSMapView.mapWithFrame(CGRectZero, camera: cameraP) 
     mapView.myLocationEnabled = true 
     view = mapView; 

     self.prepareMap(); 
    } 

    func prepareMap(){ 

     let imageName = "crosshair"; 
     let image = UIImage(named: imageName); 
     imageView = UIImageView(image: image!); 

     let screenSize: CGRect = UIScreen.mainScreen().bounds; 
     let WidthPosition = (screenSize.width*0.5)-32; 
     let heightPosition = (screenSize.height*0.5)-32; 

     imageView.frame = CGRect(x: WidthPosition, y: heightPosition, width: 64, height: 64); 
     imageView.userInteractionEnabled = true; 


     let detectTap = UITapGestureRecognizer(target: self, action: #selector(self.clicouCrosshair(_:)) ) 
     //detectTap.numberOfTapsRequired = 1 


     imageView.addGestureRecognizer(detectTap) 

     mapView.addSubview(imageView); 







    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 



    //returning to view 
    override func viewWillAppear(animated: Bool) { 
     let saveBtn : UIBarButtonItem = UIBarButtonItem(title: "Salvar", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(Maps_criarArea.salvar(_:))) 
     self.navigationItem.rightBarButtonItem = saveBtn 
    } 

    func salvar(sender:UIBarButtonItem){ 

    } 

} 
+0

まずすべて、あなたがviewWillAppearをオーバーライドした場合、それをsuper.viewWillAppear(アニメーション)と呼びます。 – Yannick

+0

よかったです。しかし、まだそこに問題があります: – Xidh

+0

あなたのセレクタが正しく見えません。代わりに – Yannick

答えて

0

mshresthで述べたように、問題はタッチのようなジェスチャーの認識にありました。

これを解決するために、地図を保持するUIViewの中にGestureRecognizerを使って画像を追加しようとするのではなく、UIViewをメインのUIView(ビュー)の中に追加しました。

ビューにサブビューとしてマップを追加します。

// PREPARA O MAPA 
    let centerBR_lat = -15.30; 
    let centerBR_lng = -49.57; 
    let cameraP = GMSCameraPosition.cameraWithLatitude(centerBR_lat, longitude: centerBR_lng, zoom: 4); 
    mapView = GMSMapView.mapWithFrame(CGRectZero, camera: cameraP) 
    mapView.myLocationEnabled = true 
    let screenSize: CGRect = UIScreen.mainScreen().bounds; 
    mapView.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height); 
    view.addSubview(mapView); 

とgestureRecognizerで画像を追加するには:

let imageName = "crosshair"; 
    let image = UIImage(named: imageName); 
    let imageView:UIImageView = UIImageView(image: image!); 
    imageView.userInteractionEnabled = true; 
    imageView.frame = CGRect(x: (screenSize.width*0.5)-32, y: (screenSize.height*0.5)-32, width: 64, height: 64); 
    let detectTap = UITapGestureRecognizer(target: self, action: #selector(Maps_criarArea.clicouCrosshair(_:)) ) 
    //detectTap.numberOfTapsRequired = 1 
    imageView.addGestureRecognizer(detectTap) 
    view.addSubview(imageView); 

ちょうどそれの内側にそれらを持っている上記のコードの両方が含まれているのfuctionを。

私は、マップを追加画像を追加し、画像が

完全なコードを助け、みんなに

おかげで押されたときに関数を呼び出すことができました。この方法:の

import UIKit 
import GoogleMaps 

class Maps_criarArea: UIViewController { 

    var projNome:String!; 
    var mapView:GMSMapView!; 

    override func viewDidLoad() { 

     super.viewDidLoad(); 


     GMSServices.provideAPIKey("AIzaSyB62KDZSGfbbN1IIVnlhewi4PpEZmxPJYM"); 

     self.prepareMap(); 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    func prepareMap(){ 



     // PREPARA O MAPA 
     let centerBR_lat = -15.30; 
     let centerBR_lng = -49.57; 
     let cameraP = GMSCameraPosition.cameraWithLatitude(centerBR_lat, longitude: centerBR_lng, zoom: 4); 
     mapView = GMSMapView.mapWithFrame(CGRectZero, camera: cameraP) 
     mapView.myLocationEnabled = true 
     let screenSize: CGRect = UIScreen.mainScreen().bounds; 
     mapView.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height); 
     view.addSubview(mapView); 



     let imageName = "crosshair"; 
     let image = UIImage(named: imageName); 
     let imageView:UIImageView = UIImageView(image: image!); 
     imageView.userInteractionEnabled = true; 
     imageView.frame = CGRect(x: (screenSize.width*0.5)-32, y: (screenSize.height*0.5)-32, width: 64, height: 64); 
     let detectTap = UITapGestureRecognizer(target: self, action: #selector(Maps_criarArea.clicouCrosshair(_:)) ) 
     //detectTap.numberOfTapsRequired = 1 
     imageView.addGestureRecognizer(detectTap) 
     view.addSubview(imageView); 

    } 

    func clicouCrosshair(sender: AnyObject){ 
     print("CROSSHAIR"); 
    } 





    //returning to view 
    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(true) 
     let saveBtn : UIBarButtonItem = UIBarButtonItem(title: "Salvar", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(Maps_criarArea.salvar(_:))) 
     self.navigationItem.rightBarButtonItem = saveBtn 
    } 

    func salvar(sender:UIBarButtonItem){ 
     print("salvar"); 
    } 


} 
1

UIImageViewはGMSMapViewの内部にあり、タップは常にGMSMapViewによって処理されます。 GMSMapViewのタップを無視して、UIImageViewに渡してください。 UIGestureRecognizerDelegateを追加し、デリゲートメソッドgestureRecognizerShouldBegin:を使用してください。お役に立てれば。

+0

実際に問題はジェスチャ認識子でした!これを解決するための方法です。 – Xidh

+0

あなたが役に立ったと思ったら、この回答を受け入れないでください。 –

+0

完了:Dベローよろしく。 – Xidh

関連する問題