(Swift) UIPanGestureRecognizer отлично работает при просмотре, пока к нему не добавится subview

У меня есть следующий вид (который является подзором общего контроллера представления):

lazy var superView: UIView = { let cv = UIView() cv.backgroundColor = .gray cv.translatesAutoresizingMaskIntoConstraints = false cv.layer.cornerRadius = 5 cv.layer.masksToBounds = true cv.isUserInteractionEnabled = true cv.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(handlePan))) return cv }() 

и вот где я устанавливаю свои ограничения для него:

 // constraints for super view func setupSuperView() { superView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true superView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true superView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true superView.heightAnchor.constraint(equalTo: view.heightAnchor, constant: -200).isActive = true // ISSUE: For some reason, adding this subview with or without constraints screws up the pan functionality of the superview superView.addSubview(subView) } 

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

 lazy var subview: UIImageView = { let sv = UIImageView() sv.translatesAutoresizingMaskIntoConstraints = false sv.contentMode = .scaleAspectFill return sv }() 

И его ограничения:

 // constraints for yes/no view within superview func setupSubView() { subView.centerXAnchor.constraint(equalTo: superView.centerXAnchor).isActive = true subView.centerYAnchor.constraint(equalTo: superView.centerYAnchor).isActive = true } 

Наконец, здесь я устанавливаю функциональность для жесты панорамы:

  // pan functionality for swiping on superview func handlePan(gesture: UIPanGestureRecognizer) { guard let superview = gesture.view else { return } // point you are tapped on let point = gesture.translation(in: view) // reference for how far left or right of the center of the superview your pan is let xFromCenter = superview.center.x - view.center.x // allows the superview to move with your finger superview.center = CGPoint(x: view.center.x + point.x, y: view.center.y + point.y) // dragged right if xFromCenter > 0 { subView.image = #imageLiteral(resourceName: "yes") subView.tintColor = UIColor.green // else dragged left } else { subView.image = #imageLiteral(resourceName: "no") subView.tintColor = UIColor.red } // when you let go if gesture.state == UIGestureRecognizerState.ended { // animate superview back to center where it originally was UIView.animate(withDuration: 0.2) { superview.center = self.view.center } } } 

Прежде чем я добавил subview (и когда я его прокомментирую), жест панорамы отлично работает над супервизором. Однако, когда я ограничиваю subview, находясь в центре супервизора, и пытаюсь переместить супервизор вокруг контроллера вида, он действует причудливо (только двигаясь влево правильно, постоянно отрываясь назад к центру при движении вправо).

Всем приветствуется всяческая помощь.

2 Solutions collect form web for “(Swift) UIPanGestureRecognizer отлично работает при просмотре, пока к нему не добавится subview”

отключите userinteraction на вашем подзапросе, и он будет работать, я думаю!

Вы код для этого должен быть,

  subView.isUserInteractionEnabled = false 

Я понял вопрос. Хотя я не знаю причины, по которой это исправление, проблема заключается в том, что изображение, которое я использовал для опции «нет» для панорамирования вида контейнера влево, вызывало полное поведение всего представления, потому что это другой изображение.

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

Благодарим вас за полезный вклад!

  • UISearchDisplayController и пользовательская ячейка
  • Не удается прочитать приложение для проверки подписей PKZip для App Store
  • Xcode 8.2.1 Не удалось создать код
  • Не удалось получить сообщение об ошибке сервера от Alamofire 3.3.0
  • Ошибки Apple Mach-O Linker, и я не знаю, что делать
  • OAuth Facebook Войти в Phonegap возвращает ошибку InvalidHeader
  • использовать prepareForSegue для кнопки
  • UIRotationGestureRecognizer активирует несколько раз Swift
  • Xcode Ui-automation - Тест не работает на физическом устройстве
  • Пример прямого геокодирования с использованием CLGeocoder
  • NSFetchedResultsController не сортирует по зашифрованным атрибутам
  • Interesting Posts

    Обновление до Xcode 7 создает предупреждение «Отсутствует текущая версия версии» на модели CoreData

    Прокрутите вниз до конца текстового меню

    Как создать всплывающее окно формы для iPad (iOS 8.1)

    Каковы примеры использования NSFileProviderExtension в Swift?

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

    Идентификация подписи кода iOS

    UILabel с объяснением текста

    Как удалить текст из кнопки «Назад» на навигационной панели в Xcode?

    Swift UnsafeMutablePointer <Unmanaged <CFString>?> Распределение и печать

    «Переопределение категории« как другой вид символа »и конфликт с именами классов выполнения Objc

    Как определить дельта изменений между двумя строками?

    iOS при использовании переменной экземпляра или метода getter

    Создание NSURLRequest с использованием строки запроса в ios

    Не удается получить доступ к свойствам типа Swift из Objective-C

    Отсутствует право на уведомление о Push Push. права подписки приложения не включают «aps-environment»,

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.