2014-09-18 2 views
0

Ссылка на видео: (низкое качество), где вы можете увидеть все, что качается. https://drive.google.com/file/d/0B6SrhxQY65faS3pfaGF0bXBiVXFncWU0aFdsVWFpUXEwaXJ3/edit?usp=sharingВлияние Strange Wobble на симулятор iPhone 6 Plus - UIDynamics

Исправление, упомянутое ниже, не работает, когда на родном (не масштабируемом режиме), поэтому на самом деле не исправить.

[Update] Таким образом, установив один пиксель раздел застегивается на представления коллекции (у меня был нулевой левый и правый раньше), делает странность уйти, это действительно странно, почему это происходит только на iPhone 6 Plus ? Мне не нравится, как он выглядит с помощью одной пиксельной вставки, поэтому вопрос останется открытым, если кто-то знает, что может быть.

[Исходный вопрос] Я использую UIAttachmentBehaviors в своем UICollectionView, который обеспечивает удобство при просмотре коллекции. Это прекрасно работает везде, за исключением симулятора iPhone 6 Plus (на XCode 6.0.1). На iPhone 6 Plus элементы коллекции вращаются и раскачиваются (когда они должны двигаться только по оси Y. Они продолжают двигаться около минуты, а затем очень медленно оседают, в то время как фактическая анимация должна длиться только для доля секунды. Они показывают четкое движение оси X. Кто-нибудь еще заметил подобную странность с iPhone 6 плюс? Мне интересно, если это ошибка симулятора или реальная проблема, но у меня нет iPhone 6 Plus для тестирования на . Он отлично работает на тренажере iPhone 6

Мой код выглядит следующим образом, и я не могу понять, как это может привести к X координат изменения:.

-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 
{ 
UIScrollView *scrollView = self.collectionView; 
CGFloat delta = newBounds.origin.y - scrollView.bounds.origin.y; 


CGPoint touchLocation = [self.collectionView.panGestureRecognizer locationInView:self.collectionView]; 

[self.dynamicAnimator.behaviors enumerateObjectsUsingBlock:^(UIAttachmentBehavior *springBehaviour, NSUInteger idx, BOOL *stop) { 
    CGFloat yDistanceFromTouch = fabsf(touchLocation.y - springBehaviour.anchorPoint.y); 
    CGFloat xDistanceFromTouch = fabsf(touchLocation.x - springBehaviour.anchorPoint.x); 
    CGFloat scrollResistance = (yDistanceFromTouch + xDistanceFromTouch)/1500.0f; 

    UICollectionViewLayoutAttributes *item = springBehaviour.items.firstObject; 
    CGPoint center = item.center; 
    if (delta < 0) { 
     center.y += MAX(delta, delta*scrollResistance); 
    } 
    else { 
     center.y += MIN(delta, delta*scrollResistance); 
    } 
    item.center = center; 

    [self.dynamicAnimator updateItemUsingCurrentState:item]; 
}]; 

return NO; 
} 

ответ

0

у меня такая же проблема при попытке использовать UICollectionView с UIKit Dynamics.

Проблема возникает, когда вы вычисляете размер элементов программно, чтобы соответствовать ширине экрана, поэтому в этом случае элементы мешают друг другу, когда динамика применяется и не может перейти к равновесию. (так что это похоже на угловой случай, когда элементы на самом деле перекрываются)

В моем случае решение прост - я просто уменьшаю размер элементов примерно на 90% от вычисленного значения. Это наложит некоторый разрыв между пунктами, но это не имеет значения в моем случае.