0

UIGravityBehavior をプログラムでサブビューに追加していますが、常に機能するとは限りません。画像に示すように、タグ 101,102,103,104 を持つメイン ビューに 4 つのビューがあります。

ここに画像の説明を入力

しかし、何らかの理由でタグ103と104のビューでのみ機能するようです。これが私のコードです:

-(void)viewsGoinDown
{
    NSPredicate *tagPredicate = [NSPredicate predicateWithFormat:@"self.tag >= 100"];
    NSArray *resultArray = [[self.view subviews] filteredArrayUsingPredicate:tagPredicate];
    for (NSUInteger i =0 ; i < resultArray.count; i++)
    {
        NSUInteger sleeping = 2;
        UIView *mySubview = resultArray [i];
        if (i == 0)
        {
            sleeping = 0;

        }

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            sleep(sleeping);


            dispatch_async(dispatch_get_main_queue(), ^()
                           {
                               [self moveDownViews:mySubview];

                           });


        });
    }
}

-(void)moveDownViews:(UIView*)myView
{
    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    self.gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[myView]];
    self.gravityBehavior.magnitude = 1;
    [self.animator addBehavior:self.gravityBehavior];

}

私の質問は、なぜこれらの2つのサブビューでしか機能しないのですか?、私が間違っているのは何ですか?

私は本当にあなたの助けに感謝します

4

1 に答える 1

1

以下の作業コードを見つけてください。

PS私は自由に実装の一部を変更しましたが、好みに応じて元に戻すことができます。

-(void)viewsGoinDown
{
    NSPredicate *tagPredicate = [NSPredicate predicateWithFormat:@"self.tag >= 100"];
    NSArray *resultArray = [[self.view subviews] filteredArrayUsingPredicate:tagPredicate];
    NSUInteger sleeping = 0;
    for (NSUInteger i =0 ; i < resultArray.count; i++)
    {

        UIView *mySubview = resultArray [i];
        [self performSelector:@selector(moveDownViews:) withObject:mySubview afterDelay:sleeping];
        sleeping++;
    }

}

-(void)moveDownViews:(UIView *)myView
{
    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
    self.gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[myView]];
    self.gravityBehavior.magnitude = 1;
    [self.animator addBehavior:self.gravityBehavior];
}
于 2014-03-14T10:55:03.600 に答える