2015-12-07 3 views
1

Недавно я пытался создать игру с маленькой понг-игрой с UIKitDynamics. Мне удалось создать основную игру. Теперь я хочу добавить дополнительную механику.Изменить размер UIView с UICollisionBehavior

Например, поведение, уменьшающее размер весла. Я добавил NSTimer, который делает подобное действие. Но я заметил, что CollisionBehavior весла не изменяет размер одновременно с веслом.

Вот мой код:

func decreaseBarSize() { 

    player1Bar.bounds = CGRect(x: player1Bar.frame.minX, y: player1Bar.frame.minY, width: player1Bar.bounds.width - 1, height: player1Bar.frame.height) 
    player1Bar.layoutIfNeeded() 
    animator.updateItemUsingCurrentState(player1Bar) 

} 

А вот функция лопастного-контроль:

func moveBar() { 

    if player == .Player1 { 

     let barFrame = player1Bar.frame 

     switch self.direction { 
     case .Right: 
      if Int(barFrame.maxX) < superviewWidth - 10 { 
       player1Bar.frame = CGRect(x: barFrame.minX + 1, y: barFrame.minY, width: barFrame.width, height: barFrame.height) 
      } 
      break 
     case .Left: 
      if Int(barFrame.minX) > 10 { 
       player1Bar.frame = CGRect(x: player1Bar.frame.minX - 1, y: barFrame.minY, width: barFrame.width, height: barFrame.height) 
      } 
      break 
     default: 
      break 
     } 
     animator.updateItemUsingCurrentState(player1Bar) 
    } else if player == .Player2 { 

     let barFrame = player2Bar.frame 

     switch self.direction { 
     case .Right: 
      if Int(barFrame.maxX) < superviewWidth - 10 { 
       player2Bar.frame = CGRect(x: barFrame.minX + 1, y: barFrame.minY, width: barFrame.width, height: barFrame.height) 
      } 
      break 
     case .Left: 
      if Int(barFrame.minX) > 10 { 
       player2Bar.frame = CGRect(x: barFrame.minX - 1, y: barFrame.minY, width: barFrame.width, height: barFrame.height) 
      } 
      break 
     default: 
      break 
     } 
     animator.updateItemUsingCurrentState(player2Bar) 
    } 

} 

Кто-нибудь идея, чтобы понять, что?

Большое спасибо!

ответ

0

Сначала добавьте границу к весле. Что-то вроде:

yourBehavior.collider.addBoundaryWithIdentifier("aBarrierName", forPath: UIBezierPath(rect: yourPlayerPaddle.frame)) 

Затем используйте func collisionBehavior для проверки на наличие столкновений и выполнения преобразования. Что-то вроде:

func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?, atPoint p: CGPoint) { 

    print("Contact by - \(identifier)") 
    let collidingView = item as? UIView 
    collidingView?.transform = CGAffineTransformMakeScale(1.5 , 1) 

    UIView.animateWithDuration(0.4) { 
     collidingView?.transform = CGAffineTransformMakeScale(1 , 1) 
    } 
}