因此,我正在使用UI Kit Dynamics创建一个滑块,可以将其滑出以显示其背后的内容。我正在使用两个UIFieldBehaviour,一个附加到UIPanGestureRecognizer的附件行为,以及UICollisionBehaviour来实现这一点。 Interface Builder中的结构如下所示: Here an image of my view hierarchy
TrayContainerView已应用约束,它也是我的DynamicAnimator的参考视图。 trayView是dynamicAnimator所依赖的dynamicItem。
这可以正常工作,直到我从Interface Builder中向trayView添加子视图,此时每当我的应用切换到特定的viewController时,我都会收到此消息:
由于未捕获的异常'无效关联'而终止应用,原因:'UIDynamicAnimator最多支持32个不同的字段'
奇怪的是,如果我以编程方式添加子视图,除了布局的一些问题外,它还能正常工作。
这是我的动态行为的设置
container = UICollisionBehavior(items: [self])
let boundaryWidth = UIScreen.mainScreen().bounds.size.width
container.addBoundaryWithIdentifier("upper", fromPoint: CGPointMake(0, offset), toPoint: CGPointMake(boundaryWidth, offset))
let boundaryHeight = self.superview!.frame.size.height + self.frame.size.height - self.layoutMargins.top
container.addBoundaryWithIdentifier("lower", fromPoint: CGPointMake(0,boundaryHeight), toPoint: CGPointMake(boundaryWidth,boundaryHeight))
tractorField = UIFieldBehavior.linearGravityFieldWithVector(CGVectorMake(0, 30))
tractorField.direction = CGVectorMake(0, -10)
let referenceRegion = (superview?.frame)!
let fieldCoefficient:CGFloat = 1
tractorField.region = UIRegion(size: CGSize(width: referenceRegion.width, height: referenceRegion.height*fieldCoefficient))
tractorField.position = CGPointMake((self.superview?.center.x)!, referenceRegion.height*fieldCoefficient/2)
tractorField.addItem(self)
gravityField = UIFieldBehavior.linearGravityFieldWithVector(CGVectorMake(0, 30))
gravityField.direction = CGVectorMake(0, 10)
gravityField.region = UIRegion(size: CGSize(width: referenceRegion.width, height: referenceRegion.height*fieldCoefficient))
gravityField.position = CGPointMake((self.superview?.center.x)!, referenceRegion.height + referenceRegion.height*fieldCoefficient/2)
gravityField.addItem(self)
animator.addBehavior(gravityField)
animator.addBehavior(tractorField)
dynamicItem = UIDynamicItemBehavior(items: [self])
animator.addBehavior(container)
animator.addBehavior(dynamicItem)
任何想法都将不胜感激。
答案 0 :(得分:0)
想出来。问题是我试图将UIView子类化并在那里做所有动态的东西。不幸的是,这不起作用,因为我怀疑动态动画师是早期调用的?我在awakeFromNib中实例化了它,这是导致崩溃的原因。无论如何在viewController的viewDidLoad方法中实现整个事情,它都应该工作。