2016-09-17 15 views
0

私はインターフェイスのようなtinderを構築しようとしています。親ビューの中心にバウンスでスナップするように、指を離します。私は、スナップ動作とパンジェスチャ認識で実装しようとしましたが、インストゥルメントには、落ちるビューのアニメーションが表示されています。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表示および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

関連する問題