2016-09-17 1 views
0

나는 인터페이스와 같은 틴더를 만들려고합니다. 그리고 손가락을 떼면 부모보기 중심으로 튀게보기가 필요합니다. 나는 snap behavios와 pan 제스처 인식기로 그것을 구현하려하지만 insted는 떨어지는 뷰의 애니메이션을 보았다.UIKit 동적 - 부모보기 중심에 스냅보기

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

당신은 설치 UIDynamicAnimator의 referenceView이보고 라하지 않도록해야 다음됩니다.

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

관련 문제