2017-07-06 12 views
2

イメージビューにUIDynamicsを追加し、そのためのパンジェスチャーを使用しました。それはパンジェスチャーでうまく動作しますが、ピンチジェスチャーを適用すると機能しません。大きな画像ビューを表示していますが、ドラッグを開始すると元のサイズに変更されます。ここでUIKitパン、回転、ピンチジェスチャーのダイナミクス

は私のコードです:

func handleAttachmentGesture(_ sender: UIPanGestureRecognizer) { 
    let location = sender.location(in: emojiSuperView!) 
    let boxLocation = sender.location(in: self) 
    switch sender.state { 
    case .began: 
     print("Your touch start position is \(location)") 
     print("Start location in image is \(boxLocation)") 

     animator.removeAllBehaviors() 

     let centerOffset = UIOffset(horizontal: boxLocation.x - self.bounds.midX, vertical: boxLocation.y - self.bounds.midY) 
     attachmentBehavior = UIAttachmentBehavior(item: self, offsetFromCenter: centerOffset, attachedToAnchor: location) 
     animator.addBehavior(attachmentBehavior) 
    case .ended: 
     print("Your touch end position is \(location)") 
     print("End location in image is \(boxLocation)") 

     animator.removeAllBehaviors() 

     // 1 
     let velocity = sender.velocity(in: emojiSuperView!) 
     let magnitude = sqrt((velocity.x * velocity.x) + (velocity.y * velocity.y)) 

     if magnitude > ThrowingThreshold { 
      // 2 
      let pushBehavior = UIPushBehavior(items: [self], mode: .instantaneous) 
      pushBehavior.pushDirection = CGVector(dx: velocity.x/10, dy: velocity.y/10) 
      pushBehavior.magnitude = magnitude/ThrowingVelocityPadding 

      self.pushBehavior = pushBehavior 
      animator.addBehavior(pushBehavior) 

      // 3 
      let angle = Int(arc4random_uniform(20)) - 10 

      itemBehavior = UIDynamicItemBehavior(items: [self]) 
      itemBehavior.friction = 0.2 
      itemBehavior.allowsRotation = true 
      itemBehavior.addAngularVelocity(CGFloat(angle), for: self) 
      animator.addBehavior(itemBehavior) 
     } 
    default: 
     attachmentBehavior.anchorPoint = sender.location(in: emojiSuperView!) 
     break 
    } 
} 


func recognizePinchGesture(sender: UIPinchGestureRecognizer) 
{ 
    weak var dynamicItem: UIDynamicItem? 
    // whatever your item is, probably a UIView 
    dynamicItem = self 
    let behavior = UIGravityBehavior(items: [dynamicItem!]) 
    let animator = UIDynamicAnimator(referenceView: emojiSuperView!) 
    // or however you're getting your animator 
    animator.addBehavior(behavior) 
    sender.view!.transform = sender.view!.transform.scaledBy(x: sender.scale, y: sender.scale) 
    animator.updateItem(usingCurrentState: self) 
    self.animator.updateItem(usingCurrentState: self) 
    sender.scale = 1 
} 
+0

いい質問+1、私も同じ問題に直面している、 – Dhiru

答えて

0

ユーザーが任意のグローバル変数に変換し、現在の保存、イベントを変換しない場合。

その後、パンニング開始時にUIAttachmentBehaviorのアクションプロパティを使用して開始状態で新しいトランスフォームを割り当てます。

 attachmentBehavior.action = { 
      self.attachmentBehavior.items[0].transform = self.aTransform 
     } 
関連する問題