2016-10-05 4 views
0

Я пытаюсь создать интерактивный переходный переход на App.Реализация в режиме скользящего просмотра Control Center в Swift

Цель состоит в том, чтобы представить uiview, когда контроллер просмотра будет перетаскиваться снизу (не от нижнего края, чтобы он не конфликтует с центром управления), и частично будет закрывать главный контроллер представления (как и iOS). Переход должен быть интерактивным, то есть в соответствии с перетаскиванием пользователя.

Был бы рад услышать идеи относительно доступных API.

+0

Я сделал это раньше, я не код на меня, но я мог бы отправить его на, когда я вернусь домой, если вы по-прежнему без ответа , –

+0

Спасибо @JacobKing за ваш быстрый ответ, я жду вашего ответа. –

+0

@ JacobKing вы можете поделиться кодом – user6520705

ответ

0

После код будет делать простой SlideView анимации код протестирована в Xcode 8 и работал ..

import UIKit 

class ViewController: UIViewController,UIGestureRecognizerDelegate { 

// I am using VisualView as a slideView 
@IBOutlet weak var slideView: UIVisualEffectView! 

//Button to open slideView 
@IBOutlet weak var button: UIBarButtonItem! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    // setting background for sideView 
     slideView.backgroundColor = UIColor(patternImage: UIImage(named: "original.jpg")!) 

    //Initial hide so it won't show.when the mainView loads... 
     slideView.isHidden = true 

    // DownSwipe to hide slideView 
     let downSwipe = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.handleSwipes(_:))) 
     downSwipe.direction = .down 
     view.addGestureRecognizer(downSwipe) 
    } 

    // set UIButton to open slideVie...(I am using UIBarButton) 
    @IBAction func sdrawButton(_ sender: AnyObject) { 

     self.slideView.isHidden = false 
     slideView.center.y += view.frame.height 

     UIView.animate(withDuration: 0.7, delay: 0, options: UIViewAnimationOptions.curveEaseIn, animations:{ 
     self.slideView.center.y -= self.view.frame.height 
     self.button.isEnabled = false 
     }, completion: nil) 
} 

    func handleSwipes(_ sender:UISwipeGestureRecognizer) { 
    if (sender.direction == .down) { 
     print("Swipe Down") 

     self.slideView.isHidden = true 

     self.slideView.center.y -= self.view.frame.height 
     UIView.animate(withDuration: 0.7, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations:{ 
      self.slideView.center.y += self.view.frame.height 
      self.button.isEnabled = true 
      }, completion: nil) 
    } 
    } 
    } 

Позвольте мне знать, что код работает для вас ...

0

Извините, если этот вопрос немного старый. Вы можете создать подкласс UIView и переопределить touchesBegan (_, с), чтобы сохранить оригинальную нажмите Местоположение

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    guard let touch = touches.first else { print("No touch"); return } 
     startPoint = touch.location(in: self) 
     startHeight = heightConstraint.constant 
     slideDirection = .none 
     super.touchesBegan(touches, with: event) 
    } 

}

и touchesMoved (_, с), чтобы обновить ограничение высоты в то время как палец сдвинув Посмотреть.

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
    guard let touch = touches.first else { print("touchesMovedno touches"); return } 

    let endPoint = touch.location(in: self) 
    let diff = endPoint.y - startPoint.y 

    // This causes the view to move along the drag 
    switch anchorLocation { 
    case .top : 
    heightConstraint.constant = startHeight + diff 
    case .bottom : 
    heightConstraint.constant = startHeight - diff 
    } 
    self.layoutIfNeeded() 

    // Update direction 
    if diff == 0.0 { 
    self.slideDirection = .none 
    } else { 
    self.slideDirection = (diff > 0) ? .down : .up 
    } 
    super.touchesMoved(touches, with: event) 

}

Override touchesEnded (_, с), чтобы добавить анимацию, если вы хотите

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 

    self.modifyHeightConstraints() 
    self.animateViewTransition(duration: animDuration, delay: animDelay, clearance: animClearance, springDampingRatio: animSpringDampingRatio, initialSpringVelocity: animInitialSpringVelocity, complete: { 
    self.slideDirection = .none 
    }) 
    super.touchesEnded(touches, with: event) 

}

Я создал компонент, который может иметь точную функцию вы хотели , Компонент включает настраиваемое анимированное подпрыгивание. Вы можете компоновать и проектировать подзаголовки на виде в раскадровке.

проверить ссылку на GitHub

https://github.com/narumolp/NMPAnchorOverlayView

Смежные вопросы