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:
). Вам не нужно создавать кучу границ.