2013-09-20 3 views
0

Im добавляя взгляды аниматора так:Почему arent добавляет представления к этому UIAnimator?

-(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

+0

Да, я так «исправил» это. Я просто задавался вопросом, почему, хотя, если они будут реагировать друг с другом, они бы не упали, даже если все они начали работать в одном месте. – marciokoko

+0

Кажется, что они взаимодействуют с краевыми столкновениями, не понимая, что они занимают одно и то же пространство и соответственно корректируют свое положение. – HalR

ответ

3

@HalR является правильным - ваши взгляды : добавляется в аниматор; они просто добавляются одновременно с одинаковыми начальными атрибутами, поэтому все они будут вести себя точно так же и отображаться как один элемент. И да, по умолчанию режим поведения столкновения - UICollisionBehaviorModeEverything, то есть его элементы должны сталкиваться друг с другом и с границами. Тем не менее, подразумевая UICollisionBehaviorModeEverything и размещая все предметы друг над другом, вы создали невозможный сценарий, в котором вы явно указали края каждого элемента на наложение, но вы сказали аниматору, что они не разрешено перекрываться. Поведение аниматора в этой точке не определено - я думаю, что он просто игнорирует любое физическое правило, которое вы нарушили вручную, но оно может стать намного более странным. В WWDC 2013 Session 206 (Getting Started with UIKit Dynamics) Apple в какой-то момент говорит, что «не ожидайте невозможного», заявив, что «вы можете создавать установки, не имеющие решений» и отображая наложенные на них элементы с коллизионными поведениями. Другими словами, они увидели это, и они просто не хотят, чтобы вы это делали. ;)

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

+1

или что я сделал, который только что установил нижнюю границу сам по себе :) – marciokoko

Смежные вопросы