gpt4 book ai didi

ios - 为什么不将 View 添加到此 UI Animator 中?

转载 作者:行者123 更新时间:2023-11-28 20:13:54 25 4
gpt4 key购买 nike

我像这样向动画师添加 View :

-(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]);
}

我只看到一个下拉到底部。

最佳答案

@HalR 是正确的——您的 View 正在被添加到动画师;它们只是同时添加,具有相同的起始属性,因此它们的行为方式完全相同,并显示为一个项目。是的,默认情况下,碰撞行为的模式是 UICollisionBehaviorModeEverything,这意味着它的项目应该相互碰撞并与边界发生碰撞。然而,通过暗示 UICollisionBehaviorModeEverything 并将所有项目放在彼此之上,您创建了一个不可能的场景,其中您明确告诉每个项目的边缘重叠,但您已经告诉不允许他们重叠的动画师。动画师此时的行为是不确定的——我认为它只是忽略了你手动破坏的任何物理规则,但它可能比这更奇怪。在 WWDC 2013 Session 206 (Getting Started with UIKit Dynamics) ,Apple 曾说过“不要期望不可能”,说“你可以创建没有解决方案的设置”,并以设置碰撞行为的重叠项目为例。换句话说,他们看到了这一点,只是不想让你这么做。 ;)

当然,使这项工作起作用的方法就是为每个项目提供一个不与其他项目的起始位置重叠的起始位置,或者将它们全部添加到您现在添加它们的位置, 彼此之间只有几秒钟的间隔,所以最后一个可以掉到一边。

关于ios - 为什么不将 View 添加到此 UI Animator 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18908284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com