(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 

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

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

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

  • Ошибка «bad codegen, pointer diff» с Xcode 4
  • Файл RestKit / RestKit.h не найден.
  • Подготовить forSegue и PerformSegueWithIdentifier отправитель
  • Неопределенные символы для архитектуры armv7 для FBSDKLoginCore
  • Как заставить ориентацию UIViewController на портретную ориентацию в iOS 6
  • Как удалить iOS 5.0 Simulator из Xcode 4.5
  • Как приложение iOS установлено на устройстве
  • Игнорирование файла SDWebImage.framework, отсутствие требуемой архитектуры x86_64
  • Импорт структуры в проект iOS5
  • pushwoosh ошибка непризнанный селектор, отправленный в экземпляр Cordova 1.7.0
  • Xcode - тестовый класс Файл является частью модуля, игнорируя импорт
  • Interesting Posts

    зачем скрыть ограничение для MBProgressHUD на YES, но isHidden метод NO?

    iOS Facebook SDK Опубликуйте фотографию на странице, где у меня есть права администратора

    Путаница в отношении NSClassFromString / Проверка для распознавателя жестов

    Данные Google Analytics iOS SDK 3.12 не отображаются на панели управления

    наиболее эффективный способ поиска с использованием оператора NSPredicate OR

    Контроллер представления подкласса: форвардная декларация

    CIDetector и UIImagePickerController

    Как загрузить большие файлы с веб-службы iphone?

    Sparkles и shine cocos2d shader

    Отправка данных на веб-службу POST JSON через iOS

    Monotouch: изменение оттенка изображения, а не только насыщенность

    NavigationController Право налево в iOS

    Остановка фонового звука при запуске

    Ошибка сброса пароля Firebase для пользователей с аутентификацией в социальных сетях

    Push Notifications не работает в Firebase 4.0

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