0

私は、IOS 9 用のアプリケーションである Xcode 7 で作業しています。目標は、UIDynamicAnimator、UIGravityBehavior、および UICollisionBehavior を使用して、丸いオブジェクトをボールのように動作させることです。UIViews (ボールを表す) が丸みを帯びているように見えますが、衝突中は四角形のように動作することを除いて、すべて正常に機能します。「ボール」をビルドして追加するコードは次のとおりです。

-(void) addBall{
    CGRect frame;
    frame.origin=CGPointZero;
    frame.size = [self randomsize];
    int x = (arc4random()%(int)self.inputView.bounds.size.width);
    frame.origin.x = x;
    UIView *bullet = [[UIView alloc] initWithFrame:frame];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10,10,40,20)];
    label.text = @"label";
    bullet.backgroundColor = [self randomColor];
    bullet.layer.cornerRadius = bullet.frame.size.width/2;
    bullet.layer.borderWidth = 2.0;
    bullet.layer.borderColor = [UIColor blackColor].CGColor;
    bullet.layer.masksToBounds=YES;

    [bullet addSubview:label];
    [self.inputView addSubview:bullet];
    [self.gravity addItem:bullet];
    [self.collider addItem:bullet];
}

これらのオブジェクトを丸い形のように動作させるには、どのプロパティを設定する必要がありますか?

以下は、重力と衝突の影響を受けた形状が地面/境界にどのように配置されるかを示すアプリの画面です。スクリーンショットに長方形の境界線を描画して、目に見えない実際の境界線を表示しますが、ボールが丸いオブジェクトとして動作するのを防ぎます。

アプリケーションのスクリーンショット1

4

2 に答える 2

3

UIView をサブクラス化し、collisionBoundsType をオーバーロードする必要があります。何かのようなもの:

-(UIDynamicItemCollisionBoundsType) collisionBoundsType
{
    return UIDynamicItemCollisionBoundsTypeEllipse;
}
于 2015-11-02T00:22:45.823 に答える
1

Swiftでは、beyowulfsの回答よりも簡単なサブクラスを作成する代わりに拡張機能を作成することができます.一度だけ必要な場合は、クラスの一番下にドロップするだけです.

extension UIView {
    func collisionBoundsType () -> (UIDynamicItemCollisionBoundsType) {
        return UIDynamicItemCollisionBoundsType.ellipse
    }
}
于 2016-11-14T14:28:14.230 に答える