iPhone 6 Plus模拟器上的奇怪摆动效果 - UIDynamics

时间:2014-09-18 10:48:10

标签: ios objective-c iphone xcode

此处的视频链接:(低质量)您可以看到一切都在摇摆不定。 https://drive.google.com/file/d/0B6SrhxQY65faS3pfaGF0bXBiVXFncWU0aFdsVWFpUXEwaXJ3/edit?usp=sharing

下面提到的修复在本机(非缩放模式)下不起作用,所以没有真正修复。

[更新] 因此在集合视图上设置一个像素部分插入(我之前左右为零),使得古怪消失,这真的很奇怪,为什么这只发生在iPhone 6 Plus?我不喜欢单像素插图看起来如何,所以如果有人知道可能会发生什么,请将问题打开。

[原始问题] 我在UICollectionView中使用UIAttachmentBehaviors,在浏览集合时提供了一种弹性感。除了在iPhone 6 Plus模拟器(在XCode 6.0.1上)之外,这在任何地方都可以正常工作。在iPhone 6 Plus上,收集项目会旋转并摆动(当它们只能在Y轴上移动时。它们继续移动大约一分钟然后非常缓慢地稳定下来,而实际的动画只能用于它们显示出清晰的X轴运动。有没有人注意到iPhone 6 plus有类似的怪异?我想知道这是一个模拟器错误还是一个真正的问题但是没有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;
}

1 个答案:

答案 0 :(得分:0)

尝试将UICollectionViewUIKit Dynamics一起使用时遇到同样的问题。

当您以编程方式计算项目大小以适应屏幕宽度时似乎出现问题,因此在这种情况下,项目会在动态应用时相互干扰,并且无法达到平衡。 (所以这就像物品实际重叠时的角落情况一样)

在我看来,解决方案很简单 - 我只是将项目大小减少到计算值的90%左右。它会在项目之间产生一些差距,但在我的情况下这并不重要。