3

赤い要素である「バリア」が動かないようにするにはどうすればよいですか?「落ちる」要素(灰色/UIView*の正方形)が落ちてバリアと相互作用できるようにするにはどうすればよいですか?

多くの灰色の要素、多くの赤い障壁があります...

ここに画像の説明を入力

@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
4

1 に答える 1

2

これをダイナミクス コードに追加する必要があります。

//Attachment behavior that you figured out:

UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:barrier attachedToAnchor:barrier.center];
[_animator addBehavior:attachment];

// To keep the views from spinning:

UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[barrier]];
itemBehavior.allowsRotation = NO;
[_animator addBehavior:itemBehavior];

ビューが画面全体にバウンスしないようにアタッチメント ビヘイビアを作成し、 を使用してUIDynamicItemBehaviorこれらのアイテムのビヘイビアを微調整します。特に、回転しないようにします。

于 2014-04-01T15:49:03.270 に答える