【发布时间】:2016-11-14 04:33:01
【问题描述】:
我正在尝试对刚从数组创建的标签对象使用 DynamicBehaviors。为此,我使用“For In”循环。所有对象都按预期创建,但只有最后一个对象是动态的。
也许我应该使用 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)
}
}
}
【问题讨论】:
-
好吧,您只有一个
UIDynamicAnimator,并且您将在数组的每次迭代中覆盖它。只有最后一次覆盖会持续 -
另外,请修复所有隐式展开的选项。他们会骂你的。
-
明白了吗? BYTE...哈哈。
-
谢谢亚历山大。我理解这个问题,并会找到解决它的方法。也适用于可选(确实不是一个好习惯)。
标签: ios arrays swift loops dynamic