Как назначить действие для объекта UIImageView в Swift



Я пытаюсь назначить UIImageView к действию, когда пользователь нажимает на него.



Я знаю, как создать действие для UIButton, но как я мог имитировать такое же поведение a UIButton, но через UIImageView?

1158   7  

7 ответов:

вам понадобится UITapGestureRecognizer. Для настройки используйте это:

override func viewDidLoad()
{
    super.viewDidLoad()

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
    imageView.isUserInteractionEnabled = true
    imageView.addGestureRecognizer(tapGestureRecognizer)
}

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
    let tappedImage = tapGestureRecognizer.view as! UIImageView

    // Your action
}

(вы также можете использовать UIButton и назначить ему изображение без текста, а затем просто подключить IBAction)

вам нужно добавить распознаватель жестов (для использования крана UITapGestureRecognizer для нажмите и удерживайте использовать UILongPressGestureRecognizer) к UIImageView.

let tap = UITapGestureRecognizer(target: self, action: #selector(YourClass.tappedMe))
imageView.addGestureRecognizer(tap)
imageView.isUserInteractionEnabled = true

и реализовать метод селектора, как:

@objc func tappedMe()
{
    println("Tapped on Image")
}

вы можете добавить UITapGestureRecognizer к книги, просто перетащите один в вашей раскадровке или xib, клавиши Ctrl-перетащить из ImageView Для в интерфейса gesturerecognizer, и Ctrl-перетащить из интерфейса gesturerecognizer в Свифт-файл, чтобы сделать IBAction.

вам также необходимо включить взаимодействие с пользователем на UIImageView, как показано на этом изображении: enter image description here

для swift 2.0 и выше сделать это

@IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.tappedMe))
        imageView.addGestureRecognizer(tap)
        imageView.userInteractionEnabled = true
    }
    func tappedMe()
    {
        print("Tapped on Image")
    }

вы могли бы просто установить изображение UIButton к тому, что вы обычно ставите в UIImageView. Например, где бы вы делали:

myImageView.image = myUIImage

вы могли бы вместо этого использовать:

myButton.setImage(myUIImage, forState: UIControlState.Normal)

Итак, вот как может выглядеть ваш код:

override func viewDidLoad(){
  super.viewDidLoad()

  var myUIImage: UIImage //set the UIImage here
  myButton.setImage(myUIImage, forState: UIControlState.Normal)
}

@IBOutlet var myButton: UIButton!
@IBAction func buttonTap(sender: UIButton!){
  //handle the image tap
}

самое замечательное в использовании этого метода заключается в том, что если вам нужно загрузить изображение из базы данных, вы можете установить название кнопки перед установкой изображения:

myButton.setTitle("Loading Image...", forState: UIControlState.Normal)

чтобы сообщить своим пользователям что вы загружаете изображение

Вы можете поставить UIButton с прозрачным фоном поверх UIImageView, и слушать для нажатия на кнопку перед загрузкой изображения

Swift 4 Code


Шаг 1 В ViewdidLoad ()

   let pictureTap = UITapGestureRecognizer(target: self, action: #selector(MyInfoTableViewController.imageTapped))
       userImageView.addGestureRecognizer(pictureTap)
       userImageView.isUserInteractionEnabled = true

Шаг 2 Добавьте Следующую Функцию

@objc func imageTapped() {

        let imageView = userImageView
        let newImageView = UIImageView(image: imageView?.image)
        newImageView.frame = UIScreen.main.bounds
        newImageView.backgroundColor = UIColor.black
        newImageView.contentMode = .scaleAspectFit
        newImageView.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
        newImageView.addGestureRecognizer(tap)
        self.view.addSubview(newImageView)

        self.navigationController?.isNavigationBarHidden = true
        self.tabBarController?.tabBar.isHidden = true

    }

Он протестирован и работает правильно

Comments

    Ничего не найдено.