Показывать вид снизу с опциями

#ios #swift #uiview #xib

#iOS #swift #uiview #xib

Вопрос:

Когда я перехожу к определенному viewcontroller, я хочу, чтобы вид снизу с опциями, подобными этому…

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

РЕДАКТИРОВАТЬ 1

Я попытался достичь того, что предложено в ссылке, используя tableview вместо представления коллекции. И это то, что у меня есть…

введите описание изображения здесь

И перетаскивание вида вниз дает мне этот вид…

введите описание изображения здесь

Но я перехожу к просмотру, я не хочу, чтобы слайд вверх охватывал всю длину представления, но он должен быть того же размера, что и на 1-м скриншоте. Как я могу этого добиться ..?

Комментарии:

1. Что вы уже пробовали?

2. Я ничего не пробовал .. потому что я в замешательстве относительно того, что попробовать… например, является ли это встроенной функцией ios или чем-то пользовательским…

3. Это не функция, вы должны создать сами. Я сделал демо почти такую. Используйте его и разрабатывайте в соответствии с вашими требованиями.

4. Что-то подобное github.com/applidium/ADOverlayContainer

5. Я открыл файл @dahiya_boy, но в нем не было ничего, кроме gif и readme…so как я могу это использовать …?

Ответ №1:

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

Сначала удалите мусор: Файл -> TDStickyView

  1. Розетки

     @IBOutlet weak var viewLeft: UIView!
    @IBOutlet weak var viewRight: UIView!
    private var angel : CGFloat = 0
      
  2. От func viewSetup

     :
    :
    // DELETE THESE 2 LINES AND THESE FUNC TOO.
    self.setCursors()  
    self.rotateView(addAngel: 0)
      
  3. От handleGesture

     if aNewOrigin.y <= 60 {
        self.rotateView(addAngel: .pi/8)
    }
    else if aNewOrigin.y >= 60 amp;amp; aNewOrigin.y < self.frame.height - 100 {
        self.rotateView(addAngel: 0)
    }
    else {
        self.rotateView(addAngel: -.pi/8)
    }
      

Теперь добавьте ограничения для cursorView,

  1. Для левого курсора

введите описание изображения здесь

  1. Для правого курсора

введите описание изображения здесь

Теперь проект стабилен, и давайте поговорим о ваших требованиях.

  1. Измените размер TableView при инициализации.

В viewSetup изменении

 //topMostY = UIApplication.shared.statusBarFrame.height
topMostY = parentVC.view.center.y
// It is the top most Y position of tableview and it can't go above it. Change it according to your requirement.
  
  1. Полностью скройте TableView.

В handleGesture изменении

 else if sender.state == .ended {
    self.panGestureColView.isEnabled = false
    if velocity.y > 0 {
        // go down
        // UIView.animate(withDuration: 0.3) {
        //     self.frame = CGRect(origin: CGPoint(x: 0, y: self.parentFrame.size.height - self.bottomMostY), size: self.frame.size)
        // }

        // Change above commented UIView.animate with below UIView.animate

        UIView.animate(withDuration: 0.3, animations: {
            self.frame = CGRect(origin: CGPoint(x: 0, y: self.parentFrame.size.height), size: self.frame.size)
        }) { (isFin) in
            self.removeFromSuperview()
        }

    }
    else if velocity.y < 0 {
        // go up
        UIView.animate(withDuration: 0.3) {
            self.frame = CGRect(origin: CGPoint(x: 0, y: self.topMostY), size: self.frame.size)
        }
    }
}
  

Вот и все.

Комментарии:

1. Спасибо @dahiya_boy. Это сработало! Просто исправление.. На самом деле я не хотел, чтобы tableview полностью скрывался, но хотел, чтобы его часть оставалась видимой при спуске. Для этого в методе handleGesture вместо нового кода, который вы добавили, был необходим закомментированный код. Но еще раз спасибо … 🙂

2. @asd2 visualEffectView может быть темным или светлым, и вы можете изменить любой из них с помощью раскадровки. Я использовал VisualEffect, поскольку он хорошо выглядел в дизайне, но если вам не нравится visualEffectView , удалите его и используйте свой вид и укажите цвет фона по вашему выбору.