因此,我正在使用UI Kit Dynamics創建一個滑塊,該滑塊可以通過滑動方式顯示它背後的內容。我使用兩個UIFieldBehaviour,一個附加到UIPanGestureRecognizer的附件行爲,以及UICollisionBehaviour來實現此目的。 Interface Builder中的結構如下所示: Here an image of my view hierarchy當在界面生成器中向動態項添加子視圖時,應用程序崩潰
TrayContainerView對其應用了約束,它也是我的DynamicAnimator的參考視圖。 trayView是dynamicAnimator執行的動態項目。
,直到我從界面生成器中添加一個子視圖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)
任何想法將不勝感激。
我已經縮小了使用UIFieldBehaviour的問題。取消註釋他們兩人將防止崩潰。好奇地使用UIGravityBehaviour不會使應用程序崩潰,但它會導致連續的一系列日誌消息,指出「每個動畫器的多重引力未定義,並且可能在將來斷言」,即使沒有其他引力或字段行爲存在 –