2016-04-13 36 views
0

因此,我正在使用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) 

任何想法將不勝感激。

+0

我已經縮小了使用UIFieldBehaviour的問題。取消註釋他們兩人將防止崩潰。好奇地使用UIGravityBehaviour不會使應用程序崩潰,但它會導致連續的一系列日誌消息,指出「每個動畫器的多重引力未定義,並且可能在將來斷言」,即使沒有其他引力或字段行爲存在 –

回答

0

想通了。問題是我試圖將子類UIView,並在那裏做所有的動態的東西。不幸的是,這不起作用,因爲我懷疑動態動畫製作者早就被要求了?我在awakeFromNib中實例化了這是造成崩潰的原因。無論如何,在viewController的viewDidLoad方法中實現整個事情,並且它的所有工作都應該如此。

相關問題