#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
-
Розетки
@IBOutlet weak var viewLeft: UIView! @IBOutlet weak var viewRight: UIView! private var angel : CGFloat = 0
-
От
func viewSetup
: : // DELETE THESE 2 LINES AND THESE FUNC TOO. self.setCursors() self.rotateView(addAngel: 0)
-
От
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,
- Для левого курсора
- Для правого курсора
Теперь проект стабилен, и давайте поговорим о ваших требованиях.
- Измените размер 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.
- Полностью скройте 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
, удалите его и используйте свой вид и укажите цвет фона по вашему выбору.