2016-11-14 2 views
1

Я пытаюсь использовать DynamicBehaviors для объектов Label, которые я только что создал из массива. Для этого я использую цикл «For In». Все объекты создаются, как и ожидалось, но только последние становятся динамическими.Как применять dynamicBehavior для нескольких объектов одновременно

Возможно, мне следует использовать UIDynamicItemGroup, но после многих попыток я все еще не понимаю, как его использовать.

Как вам может быть интересно, я новичок в объектно-ориентированном программировании, поэтому надеюсь, что это не будет пустой тратой времени для вас.

Ниже кода у меня есть на самом деле.

Заранее благодарен.

import UIKit 

class ViewController: UIViewController { 



    var tests:[String] = ["test1","test2","test3","test4","test5","test6","test7","test8","test9","test10","test11"] 
    var viewLabelArray:UIView! 


    var label:UILabel! 
    var color:UIColor! 
    var animator:UIDynamicAnimator! 


    var dynamicBehavior:UIDynamicBehavior! 
    var collisionBehavior:UICollisionBehavior! 
    var countLabel = 0 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     let size:CGFloat = 50.0 
     var positionX:CGFloat = 60.0 
     var positionY:CGFloat = 100.0 


     for test in tests { 
      label = UILabel(frame:CGRect(x: positionX, y: positionY, width: size, height: size)) 
      label.center = CGPoint(x: positionX, y: positionY) 
      label.layer.cornerRadius = size * 0.5 
      label.layer.masksToBounds = true 
      label.backgroundColor = color 
      label.textAlignment = .center 
      label.textColor = UIColor.white 
      label.adjustsFontSizeToFitWidth = true 
      label.numberOfLines = 1 
      label.text = test 
      self.view.addSubview(label) 

      countLabel = countLabel + 1 

      if countLabel == 4 || countLabel == 8 { 
       positionX = positionX - 140 
       positionY = positionY + 100 
      } else { 
       positionX = positionX + 60 
      } 

      let gravity = UIGravityBehavior(items: [label]) 
      let direction = CGVector(dx: 0.0, dy: 1.0) 
      gravity.gravityDirection = direction 


      let bounce = UIDynamicItemBehavior(items: [label]) 
      bounce.elasticity = 1 

      let boundries = UICollisionBehavior(items: [label]) 
      boundries.translatesReferenceBoundsIntoBoundary = true 

      animator = UIDynamicAnimator(referenceView: self.view) 


      animator.addBehavior(bounce) 
      animator.addBehavior(boundries) 
      animator.addBehavior(gravity) 


     } 
    } 

} 
+1

Ну у вас есть только один 'UIDynamicAnimator', и вы перезаписать его с каждой итерации массива. Только эта последняя перезапись будет сохраняться – Alexander

+0

Кроме того, исправьте все неявно развернутые опции. Они собираются бать вас в задницу. – Alexander

+0

Получите это? БЕЙТ ... ха. – Alexander

ответ

2

Я изменил некоторые строки вашего кода, и он отлично работает для меня.

Благодаря Alexander Momchliov

var animatorArray = [UIDynamicAnimator]() 

for (i,test) in tests.enumerated() { 
    //code 
    let bounce = UIDynamicItemBehavior(items: [label]) 
    bounce.elasticity = 1 

    let boundries = UICollisionBehavior(items: [label]) 
    boundries.translatesReferenceBoundsIntoBoundary = true 

    animatorArray.append(UIDynamicAnimator(referenceView: self.view)) 
    animatorArray[i].addBehavior(gravity) 
    animatorArray[i].addBehavior(bounce) 
    animatorArray[i].addBehavior(boundries) 
} 

Скриншот:

enter image description here

+0

Спасибо Ашок. Получил вашу цель, создав массив UIDynamicAnimator, но не работает для меня. Ваш «[i]» относится к циклу (я получаю неразрешенный идентификатор)? Подойдя ближе, я думаю. – Bastien

+0

Я обновил его, пожалуйста, проверьте. дайте мне знать, если у вас возникнут проблемы :-) –

+0

Это замечательный Ашок. Теперь он отлично работает. Большое спасибо!!! – Bastien

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