3
"떨어지는"요소 (회색/UIView * 사각형)가 넘어져 장벽과 상호 작용할 수있는 동안 빨간색 요소 인 "장애물"이 움직이지 않도록하려면 어떻게해야합니까? (에스)?UIKit 다이내믹스 충돌 - 장애물 요소 고정
많은 회색 요소, 많은 붉은 장벽이 있습니다 ...
당신은 당신의 동역학 코드에이를 추가 할 필요가@interface MainViewController()
{
UIDynamicAnimator* _animator;
UIGravityBehavior* _gravity;
UICollisionBehavior* _collision;
//
NSMutableArray *collisionArray;
}
@end
@implementation MainViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//
collisionArray = [[NSMutableArray alloc] init];
_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
[self addTheBarrier];
}
-(void)addTheBarrier
{
for (int i=0; i<20; i++) {
UIView* barrier = [[UIView alloc] initWithFrame:CGRectMake(i*16, 250, 10, 10)];
barrier.backgroundColor = [UIColor redColor];
[self.view addSubview:barrier];
CGPoint rightEdge = CGPointMake(barrier.frame.origin.x +
barrier.frame.size.width, barrier.frame.origin.y);
[_collision addBoundaryWithIdentifier:@"barrier"
fromPoint:barrier.frame.origin
toPoint:rightEdge];
[collisionArray addObject:barrier];
}
[self startDynamic];
}
#pragma mark - Dynamics
-(void)startDynamic
{
UIView* square = [[UIView alloc] initWithFrame:CGRectMake((arc4random()%250)+10, 100, 10, 10)];
square.backgroundColor = [UIColor grayColor];
[self.view addSubview:square];
[collisionArray addObject:square];
_collision = [[UICollisionBehavior alloc] initWithItems:collisionArray];
_gravity = [[UIGravityBehavior alloc] initWithItems:@[square]];
[_animator addBehavior:_gravity];
//
UIDynamicItemBehavior* itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[square]];
itemBehaviour.elasticity = 0.85;
[_animator addBehavior:itemBehaviour];
//
UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[ square ] mode:UIPushBehaviorModeContinuous];
[push setPushDirection:CGVectorMake(0, 0)];
[_animator addBehavior:push];
[_collision setTranslatesReferenceBoundsIntoBoundary:NO];
[_animator addBehavior:_collision];
[self performSelector:@selector(startDynamic) withObject:nil afterDelay:0.3 ];
}
@end
지금 전체 답변을 작성할 시간이 없지만 UIAttachmentBehavior를 살펴보십시오. – Undo
감사합니다. 실행 취소, 부분적으로 작동 중입니다. 이제 빨간색 녀석은 잠겨 있지만 여전히 중심점 주위를 회전합니다 ... (멋진 효과에도 불구하고)) – chewy
지금까지 작성한 코드를 게시 할 수 있습니까? 나는 당신이 그것을 보여 주면 그들이 회전에서 그들을 유지하는 방법을 알아낼 수있을 것 같아요. – Undo