добавление распознавателя жестов в uiimage - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть ползунок изображения ... я следовал этому уроку, чтобы сделать это: Создайте горизонтальный пейджинговый UIScrollView с UIPageControl Swift 4 XCode 9 , и он работает отлично ..

Теперь я хочудобавить распознаватель жестов на эти изображения .. я пытался сделать это так:

func createSlides() -> [banner] {

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapped))
    tapGesture.numberOfTapsRequired = 1
    tapGesture.numberOfTouchesRequired = 1

    let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
    slide1.img.image = UIImage(named: "bannerex")
    slide1.img.addGestureRecognizer(tapGesture)

    let slide2:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
    slide2.img.image = UIImage(named: "bannerex")
    slide2.img.addGestureRecognizer(tapGesture)

    let slide3:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
    slide3.img.image = UIImage(named: "bannerex")
    slide3.img.addGestureRecognizer(tapGesture)

    return [slide1, slide2, slide3]
}

@objc func tapped(_ sender: UITapGestureRecognizer){
    print("tapped")
    print(pageControl.currentPage)
}

, но он не работает, ничего не произойдет.

Как решить эту проблему?

import UIKit

class banner: UIView {


@IBOutlet weak var img: UIImageView!

 }

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

UITapGestureRecognizer должен использоваться только с одним видом, поэтому вам нужно создать разные UITapGestureRecognizer для каждого изображения, если вы хотите обнаружить касание на каждом image.Читать дальше ЗДЕСЬ .

И вам нужно установить isUserInteractionEnabled на true для каждого imageView.

0 голосов
/ 21 февраля 2019

Здесь есть две проблемы:

  1. isUserInteractionEnabled по умолчанию false
  2. вы должны назначить каждому виду изображения отдельный распознаватель жестов

Решение

Вместо установки isUserInteractionEnabled в true для каждого вида изображения отдельно, я предлагаю поместить этот код в сам класс Banner.Поскольку кажется, что вы инициализируете его из раскадровки, использование функции awakeFromNib должно работать просто отлично:

class Banner: UIView {

    @IBOutlet weak var img: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()
        img.isUserInteractionEnabled = true
    }
 }

В вашей функции createSlides() добавьте отдельный жест касания для каждого вида:

let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))

или даже лучше для масштабирования и избыточности без кода:

function tap() -> UITapGestureRecognizer {
    return UITapGestureRecognizer(target: self, action: #selector(tapped))
}

let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(tap())
0 голосов
/ 21 февраля 2019

Просмотр изображений игнорирует пользовательские события по умолчанию.Если вы хотите, чтобы представление изображений также обрабатывало взаимодействия с пользователем, измените значение его свойства isUserInteractionEnabled на true.

...