单击 UIImageView SWIFT 不工作
On click UIImageView SWIFT not working
有一个名为 "imageView" 的对象,我需要在单击 "imageView" 时始终调用函数 "clicouCrosshair",但它不起作用。我尝试了一些在互联网上找到的不同教程,但没有成功。任何人都知道为什么以及我该如何解决这个问题?
我认为问题是因为我将我的视图用作 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){
}
}
您的 UIImageView 在您的 GMSMapView 中,您的点击始终由 GMSMapView 处理。尝试忽略 GMSMapView 中的点击并将其传递给 UIImageView。在您的视图中添加 UIGestureRecognizerDelegate 并使用委托方法 gestureRecognizerShouldBegin:
。希望这有帮助。
如 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);
包含上面两个代码的函数只是将它们包含在其中。
这样我就可以添加地图、添加图像并在按下图像时调用函数
感谢所有帮助过的人
完整代码:
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");
}
}
有一个名为 "imageView" 的对象,我需要在单击 "imageView" 时始终调用函数 "clicouCrosshair",但它不起作用。我尝试了一些在互联网上找到的不同教程,但没有成功。任何人都知道为什么以及我该如何解决这个问题?
我认为问题是因为我将我的视图用作 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){
}
}
您的 UIImageView 在您的 GMSMapView 中,您的点击始终由 GMSMapView 处理。尝试忽略 GMSMapView 中的点击并将其传递给 UIImageView。在您的视图中添加 UIGestureRecognizerDelegate 并使用委托方法 gestureRecognizerShouldBegin:
。希望这有帮助。
如 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);
包含上面两个代码的函数只是将它们包含在其中。
这样我就可以添加地图、添加图像并在按下图像时调用函数
感谢所有帮助过的人
完整代码:
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");
}
}