为啥视图没有被添加到这个 Animator 中?
Posted
技术标签:
【中文标题】为啥视图没有被添加到这个 Animator 中?【英文标题】:Why arent the views being added to this UIAnimator?为什么视图没有被添加到这个 Animator 中? 【发布时间】:2013-09-20 03:18:48 【问题描述】:我正在像这样向动画师添加视图:
-(void)drawCellLikeViews
//2. Add Animator
_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];
//Alloc array
viewsArray = [[NSMutableArray alloc] initWithCapacity:6];
for (int numberOfViews = 0; numberOfViews < 5; numberOfViews++)
//Create views
UIView* cell = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 70)];
cell.backgroundColor = [UIColor grayColor];
[self addSubview:cell];
[viewsArray addObject:cell];
//3. Add Gravity
_gravity = [[UIGravityBehavior alloc] initWithItems:viewsArray];
[_animator addBehavior:_gravity];
//4. Add boundaries
_collision = [[UICollisionBehavior alloc] initWithItems:viewsArray];
_collision.translatesReferenceBoundsIntoBoundary = YES;
[_animator addBehavior:_collision];
//8. Add ItemProperties' Behaviors
UIDynamicItemBehavior* itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:viewsArray];
itemBehaviour.elasticity = 0.6;
//9. itemBehaviour.action = ^;
[_animator addBehavior:itemBehaviour];
NSLog(@"viewcount %d", [[self subviews] count]);
我只看到一个下拉到底部。
【问题讨论】:
你看到其他人没有下拉吗?因为看起来它们都是从同一个地方开始的,并且具有相同的行为,所以它们会一致地移动并相互叠加,给人一种物体坠落的感觉。 是的,我就是这样“修复”它的。我只是想知道为什么,如果他们相互反应,即使他们都从同一个地方开始,他们最终不会堆叠起来。 似乎它们与边缘碰撞相互作用,而不是理解它们占据相同的空间并相应地调整它们的位置。 【参考方案1】:@HalR 是正确的——您的视图正在被添加到动画师中;它们只是以相同的起始属性同时添加,因此它们的行为方式完全相同并显示为一个项目。是的,默认情况下,碰撞行为的模式是UICollisionBehaviorModeEverything
,这意味着它的项目应该相互碰撞并与边界碰撞。然而,通过暗示UICollisionBehaviorModeEverything
并将所有项目彼此叠放,您创建了一个不可能的场景,其中您明确告诉每个项目的边缘重叠,但您告诉动画师他们'不允许重叠。动画师在这一点上的行为是不确定的——我认为它只是忽略了你手动破坏的任何物理规则,但它可能会变得更奇怪。在WWDC 2013 Session 206 (Getting Started with UIKit Dynamics) 中,Apple 曾一度表示“不要指望不可能的事情”,说“您可以创建没有解决方案的设置”,并以设置碰撞行为的重叠项目为例。换句话说,他们看到了这种情况,只是不想让你这么做。 ;)
当然,实现这项工作的方法就是给每个项目一个不与其他项目的起始位置重叠的起始位置,或者将它们全部添加到您现在添加它们的位置,彼此之间仅相隔几秒钟,因此最后一个可以不碍事。
【讨论】:
或者我所做的只是自己设置了下边界:)以上是关于为啥视图没有被添加到这个 Animator 中?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用自动布局将 UIButton 添加到我的视图中,但它没有出现。为啥? [关闭]