UIDynamics: Весна

Я пытаюсь создать анимацию в iOS Приложение, которое я разрабатываю. У меня есть коробка, которая падает, пока не столкнется с баром. Я также добавил bounce к коробке для удара по планке. То, что я сейчас пытаюсь добавить, это поведение на панели, поэтому, когда коробка попадает на панель, реакция становится слабой. Я пытался добавить UIAttachmentBehavior но не мог понять, как правильно его реализовать. Я видел WWDC видео и прочее, но я не могу заставить его работать в этой настройке. Если бы вы могли показать мне в этом примере, как это реализовать, это было бы здорово.

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _mainView = [[UIView alloc] initWithFrame:[[self view] bounds]];
    [_mainView setBackgroundColor:[UIColor clearColor]];
    [[self view] addSubview: _mainView];

    _objectView = 
     [[UIView alloc] initWithFrame:CGRectMake(_mainView.bounds.size.width/2-40, 40,
                                              80, 80)];
    [_objectView setBackgroundColor:[UIColor redColor]];
    [_mainView addSubview: _objectView];

    _barView = 
     [[UIView alloc] initWithFrame:CGRectMake(_mainView.bounds.size.width/2-50, 
                                              (_mainView.bounds.size.height/5) * 4, 
                                              100, 3)];
    [_barView setBackgroundColor:[UIColor blackColor]];
    [_mainView addSubview: _barView];

    //----------------------------------

    _animator = [[UIDynamicAnimator alloc] initWithReferenceView:_mainView];

    BounceCustomBehavior *bouncyBehavior = 
     [[BounceCustomBehavior alloc] 
                     initWithItems:@[_objectView] 
                            objects:[NSArray arrayWithObjects:_barView, nil]];
    [_animator addBehavior:bouncyBehavior];

    //-----------------------------------


}

#import "BounceCustomBehavior.h"

@implementation BounceCustomBehavior
-(instancetype)initWithItems:(NSArray *)items objects:(NSArray *)collisionObjs {
    if (!(self = [super init])) return nil;

    UIGravityBehavior* gravityBehavior = [[UIGravityBehavior alloc] initWithItems:items];
    [self addChildBehavior:gravityBehavior];

    UICollisionBehavior* collisionBehavior = [[UICollisionBehavior alloc] initWithItems:items];
    collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

    for (UIView * view in collisionObjs) {
        CGPoint rightEdge = CGPointMake(view.frame.origin.x +
                                        view.frame.size.width, view.frame.origin.y);
        [collisionBehavior addBoundaryWithIdentifier:@""
                                    fromPoint:view.frame.origin
                                      toPoint:rightEdge];
    }
    [self addChildBehavior:collisionBehavior];

    UIDynamicItemBehavior *elasticityBehavior = [[UIDynamicItemBehavior alloc] initWithItems:items];
    elasticityBehavior.elasticity = 0.3f;
    [self addChildBehavior:elasticityBehavior];

    return self;
}
@end

1 ответ

Решение

Несмотря на то, что поведение вложения очень мощное, я сначала предлагаю вам попробовать присоединить строку к поведению привязки и посмотреть, работает ли оно для вас. Как правило, вам нужно несколько способов прикрепления (часто 4), чтобы стабилизировать элемент. Snap дает сходные эффекты с одним, часто более простым в использовании поведением.

В качестве отдельной проблемы вы неправильно настраиваете свои коллизии. Просто добавьте все ваши взгляды на поведение при столкновении (используя addItem:). Вам не нужно создавать кучу границ.

Другие вопросы по тегам