2016-09-17 4 views
0

Я пытаюсь создать такой интерфейс, как и интерфейс, и я хочу, чтобы View привязывался с отскоками к центру родительского вида, когда палец был выпущен. Я пытаюсь реализовать его с помощью snap behavios и распознавателя жестикуляции, но insted я вижу анимацию падения вниз.UIKit Dynamic - привязка к центру родительского вида

enter image description here

Мой код следующий

class ViewController: UIViewController { 

var d = UIView() 
var snap: UISnapBehavior! 
var animator:UIDynamicAnimator! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    d.translatesAutoresizingMaskIntoConstraints = false 
    d.backgroundColor = .redColor() 

    view.addSubview(d) 

    d.heightAnchor.constraintEqualToConstant(150).active = true 
    d.widthAnchor.constraintEqualToConstant(150).active = true 
    d.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor).active = true 
    d.centerYAnchor.constraintEqualToAnchor(view.centerYAnchor).active = true 

    d.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "pan:")) 

    animator = UIDynamicAnimator(referenceView: d) 


} 

func pan(gesture:UIPanGestureRecognizer) { 
    switch gesture.state { 
    case .Changed: 
     d.frame.origin.x = gesture.translationInView(d).x 
    case .Ended: 
     snap = UISnapBehavior(item: d, snapToPoint: view.center) 
     animator.addBehavior(snap) 
    default: 
     break 
    } 
} 
} 

ответ

0

Вы должны настроить referenceView в UIDynamicAnimator для просмотра и не d.

animator = UIDynamicAnimator(referenceView: view) 

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

func pan(gesture:UIPanGestureRecognizer) { 

    let panLocationInView = gesture.locationInView(view) 
    let panLocationInD = gesture.locationInView(d) 

    switch gesture.state { 
    case .Began: 
     animator.removeAllBehaviors() 
     let offset = UIOffsetMake(panLocationInD.x - CGRectGetMidX(d.bounds), panLocationInD.y - CGRectGetMidY(d.bounds)) 
     attachmentBehaviour = UIAttachmentBehavior(item: d, offsetFromCenter: offset, attachedToAnchor: panLocationInView) 
     animator.addBehavior(attachmentBehaviour!) 
    case .Changed: 
     attachmentBehaviour?.anchorPoint = panLocationInView 
    case .Ended: 
     animator.removeAllBehaviors() 
     animator.addBehavior(UISnapBehavior(item: d, snapToPoint: view.center)) 
    default: 
     break 
    } 

} 

enter image description here

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