0

UIView を固定して衝突オブジェクトとして配置することはできますか? 私の例では、ボックス ビューが落下し、フロア ビューと衝突します。フロアビューをその場所にとどめたいのですが、ボックスに当たった後に移動しています。どうすれば一箇所に接着できますか (オブジェクトを拡大したり、UIView (UIBezierPath など) 以外のオブジェクトを使用したりしたくありません)。

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *start = [[UIButton alloc]initWithFrame:CGRectMake(200, 20, 40, 40)];
    start.backgroundColor = [UIColor redColor];
    [start addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];
    [main addSubview:start];

    self.box1 = [[UIView alloc]initWithFrame:CGRectMake(50, 0, 20, 20)];
    self.box1.backgroundColor = [UIColor redColor];
    [main addSubview:self.box1];

    self.floor = [[UIView alloc]initWithFrame:CGRectMake(0, main.frame.size.height-20, main.frame.size.width, 200)];
    self.floor.backgroundColor = [UIColor lightGrayColor];
    [main addSubview:self.floor];  
}

- (void) start {
    self.animation = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
    UIGravityBehavior *gravity = [[UIGravityBehavior alloc]initWithItems:@[self.box1]];
    [self.animation addBehavior:gravity];

    UICollisionBehavior *collision = [[UICollisionBehavior alloc]initWithItems:@[self.box1, self.floor]];
    [self.animation addBehavior:collision];
}
4

2 に答える 2

0

問題の解決策の 1 つ (これは非常に単純なセットアップです) は、参照ビューとして機能するUIViewを作成することです。ビューの下部が床になるようにフレームを設定します。次に、ボックスをその参照ビューのサブビューとして追加し、translatesReferenceBoundsIntoBoundaryを YES に設定して衝突動作を追加すると、ボックスが床に落ちます。

// Reference view
CGRect referenceFrame = CGRectMake(0, 0, 320, 500); // the floor will be at y = 500
UIView *referenceView = [[UIView alloc] initWithFrame:referenceFrame];
[self.view addSubview:referenceView];

// Box
CGRect boxFrame = CGRectMake(50, 50, 10, 10);
UIView *boxView = [[UIView alloc] initWithFrame:boxFrame];
boxView.backgroundColor = [UIColor redColor];

[referenceView addSubview:boxView];

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:referenceView];

// Gravity
UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[boxView]];
[self.animator addBehavior:gravity];

UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[boxView]];
collision.translatesReferenceBoundsIntoBoundary = YES;
[self.animator addBehavior:collision];

referenceViewの外側の床にきれいなビジュアルを提供できます

于 2014-09-18T21:11:20.687 に答える