добавляешь показывающийся контроллер на свою вьюху. Туда же добавляешь PanRecognizer и слушаешь его работу. Также тебе нужно либо по KVO слушать вложенную UIScrollView, либо делать подмену делегата ей (что-то типа multicast delegate) и слушать scrollViewDidScroll.
По изменению pan'a ты начинаешь слушать offset у scrollView и если он становится больше 0, то делаешь scrollView.bounce = false и наоборот. Это нужно, чтобы scrollView не прыгала по достижению кромки.
Ну а по изменению pan'a ты двигаешь свою вьюху, менешь ей трансформ или как-то иначе делаешь. Потом при отпускании pan ты считаешь ускорение и на освновании этого принимаешь решение, куда будет двигаться твоя вьюха. И потом решаешь закрывать её или нет.
По поводу KVO vs didScroll и подменой делегата: подмена делегата будет самой крутой техникой, потому что тогда у тебя будет твоя вьюха прямо за scrollView следовать при bouncing, а вот с KVO проблема, потому что он пропускает какие-то значения и поэтому у тебя в одном случае анимация будет слегка рваная, когда ты тянаешь, доводишь до bounce вверх и сразу тянешь пальцем. Там что-то у KVO идёт не так и по итогу будет чуток некрасиво. Но это не так критично))
Обсуждают сегодня