2016-04-13 117 views
0

'da dinamik bir öğeye alt görünüm eklendiğinde uygulama çöküyor Bu nedenle arkasında ne olduğunu ortaya çıkarmak üzere kaydırılabilen bir sürgü oluşturmak için UI Kit Dynamics kullanıyorum. UIPanGestureRecognizer'a bağlanan iki UIFieldBehaviour'su ve bunu başarmak için UICollisionBehaviour kullanıyorum. Arabirim Oluşturucu'daki yapı şu şekilde görünür: Here an image of my view hierarchyArabirim Oluşturucu

TrayContainerView uygulamasının kısıtlamaları vardır ve ayrıca DynamicAnimator'ım için referans görünümüdür. trayView, dynamicAnimator'ın üzerinde çalıştığı dynamicItem.

Ben bu noktada ben her o belirli ViewController benim app anahtarları Bu mesajı alır, Interface Builder içinden trayView bir subview eklenene kadar bu çalışıyor: nedeniyle yakalanmamış istisna 'Geçersiz Derneği' olarak

app Sonlandırma, reason: 'UIDynamicAnimator, en fazla 32 farklı alanı destekler'

Tuhaf olan şey, alt görünümü programsal olarak eklediğimde, düzen ile ilgili bazı sorunlar için iyi kaydetme işlemidir.

İşte benim dinamikleri için tuzak herhangi bir fikir büyük takdir

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) 

davranışlar.

+0

Bu sorunu UIFieldBehaviour'un kullanımına daralttım. her ikisini de rahatsız etmek kazaları önleyecektir. UIGravityBehaviour'u merakla kullanmak, uygulamayı çökertmeyecek, ancak başka bir yerçekimi veya alan davranışı olmasa bile, "Animatör başına çoklu çekim davranışı tanımlanmamış ve gelecekte ortaya çıkabileceğini" belirten sürekli bir dizi günlük mesajı ile sonuçlanacaktır. –

cevap

0

Şekil verilmiş. Sorun UIView'in alt sınıfını denemeye ve oradaki tüm dinamik şeyleri yapmaya çalıştım. Ne yazık ki bu dinamik animatör erken çağrılırken şüpheli gibi çalışmıyor? Kilitlenme sebebi olan awakeFromNib'de başlattım. Her şeyi bir viewController viewDidLoad yönteminde uygulayarak her şey gerektiği gibi çalıştı.