2016-05-04 2 views
1

Как описано в этом UICollectionViewFlowlayout, Шаг 1:Тип выражения неоднозначный | SpringyCollectionViewFlowLayout

// Need to overflow our actual visible rect slightly to avoid flickering. 
var visibleRect = CGRectInset(self.collectionView!.bounds, -100, -100) 
var itemsInVisibleRectArray: NSArray = super.layoutAttributesForElementsInRect(visibleRect)! 
var itemsIndexPathsInVisibleRectSet: NSSet = NSSet(array: itemsInVisibleRectArray.valueForKey("indexPath") as [AnyObject]) 

// Step 1: Remove any behaviours that are no longer visible. 
var noLongerVisibleBehaviours = (self.dynamicAnimator.behaviors as NSArray).filteredArrayUsingPredicate(NSPredicate(block: {behaviour, bindings in 
    var currentlyVisible: Bool = itemsIndexPathsInVisibleRectSet.member((behaviour as UIAttachmentBehavior).items.first!.indexPath) != nil 
    return !currentlyVisible 
})) 

«Тип выражения неоднозначное без больше контекста» .. что мне делать? Я действительно застрял:/

Спасибо за любую помощь я могу получить на это ...

ответ

1

Если кто-то может просто хочу, чтобы решить эту проблему, смотрите здесь:

let visibleRect = CGRectInset(self.collectionView!.bounds, -100, -100) 
    let itemsInVisibleRect = super.layoutAttributesForElementsInRect(visibleRect)! 
    let indexPathsInVisibleRect = Set(itemsInVisibleRect.map({ (attribute) -> NSIndexPath in 
     return attribute.indexPath 
    })) 

    // Step 1: Remove any behaviours that are no longer visible. 

    let noLongerVisisbleBehaviors = self.dynamicAnimator.behaviors.filter { (eachBehavior) -> Bool in 
     var currentlyVisible = false 
     if let behavior = eachBehavior as? UIAttachmentBehavior, first = behavior.items.first as? UICollectionViewLayoutAttributes { 
      currentlyVisible = indexPathsInVisibleRect.contains(first.indexPath) 
     } 
     return !currentlyVisible 
    } 

К счастью, это оказалось действительно огромным сбережением за день:}