我正在以编程方式将UIGravityBehavior添加到子视图中,但并不总是工作。我在主视图中有4个视图,标签为101,102,103,104,如图中所示:

但出于某种原因,它似乎只适用于标签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];
}我的问题是,为什么只适用于这两个子视图?,我做错了什么?
我非常感谢你的帮助
发布于 2014-03-14 10:55:03
请查找以下工作代码:
我已经冒昧地改变了一些你可以根据你的口味改变的实现。
-(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];
}https://stackoverflow.com/questions/22389055
复制相似问题