Swift - скрыть вид, если прикоснуться к нему снаружи - PullRequest
0 голосов
/ 09 октября 2018

Я в настоящее время кодирую систему календаря в моем приложении.Я уже показываю / скрываю календарь с помощью UIButton, с созданной мной функцией toogleCalendar().

Я хотел бы скрыть календарь, когда календарь отображается и если пользователь нажимает за его пределами.

Примерно так:

enter image description here

Если я щелкну за пределами календаря, календарь исчезнет.

Я пытался вставить подпредставление и добавить к нему GestureRecognizer, но он не работает.

У вас есть идеи о том, как я могу это сделать?

Это функция переключения:

func toggleCalendar(){
      if !calendarIsHidden {
         calendarIsHidden = true

         UIView.animate(withDuration: 0.2, animations: {
            self.shadowCalendarView.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
            self.shadowCalendarView.alpha = 0
         }) { (finish) in
            if finish {
               self.shadowCalendarView.isHidden = self.calendarIsHidden
            }
         }

      } else {

         calendarIsHidden = false
         self.shadowCalendarView.isHidden = self.calendarIsHidden

         UIView.animate(withDuration: 0.2, animations: {
            self.shadowCalendarView.transform = .identity


            self.shadowCalendarView.alpha = 1

         }) { (finish) in
            // Nothing for now
         }

      }

}

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Добавьте UITapGestureRecognizer к вашему self.view и внутри части action конструктора UITapGestureRecognizer вы введете функцию, в которой вы представите логику для проверки, если ваш календарь представлен / включен и может скрыть его.

let mytapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
self.view.addGestureRecognizer(mytapGestureRecognizer)
self.isUserInteractionEnabled = true

func handleTap(_ sender:UITapGestureRecognizer){

  if !calendarIsHidden {
   calendarIsHidden = true

   //Hide the calendar here

  }
  else {
   calendarIsHidden = false

   // Show the Calendar Here
  }

}
0 голосов
/ 09 октября 2018

Вы видите, как экран становится темнее, когда открыт дочерний вид?Вы можете добавить черный вид с 0,5 (например) альфа под вашим календарем и добавить UIGestureTapRecognizer к нему следующим образом (я полагаю, для этого shadowCalendarView?):

// Somewhere in the code, for example on viewDidLoad if its a UIViewController, or anywhere in your dismissal function:
shadowCalendarView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(yourClassName.handleDismiss)))

@objc func handleDismiss() {
    // Dismisses the calendar with fade animation
    UIView.animate(withDuration: 0.3, animations: {
        self.calendarView.alpha = 0.0
        self.shadowCalendarView.alpha = 0.0
    }) { ( finished ) in
        self.calendarView.isHidden = true
        self.shadowCalendarView.isHidden = true
        // If you are implementing calendar as a child view, remove it in the completion block of the animation like so:
        self.willMove(toParentViewController: nil)
        self.view.removeFromSuperview()
        self.removeFromParentViewController()
    }
}

Еслиэтот ответ недостаточно ясен, попробуйте предоставить больше информации, и я постараюсь внести соответствующие изменения.Например, реализация, это новый ViewController как childView?Это только вид?

...