2014-03-13 22 views
0

我将UIGravityBehavior以编程方式添加到子视图中,但并不总是奏效。我在与标签101,102,103,104主视图4次,因为它显示的图像:iOS将UIGravityBehavior添加到子视图并不总是有效

enter image description here

但似乎只适用于视图与标签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子视图?我做错了什么?

我会很感激你的帮助

回答

1

请看以下工作代码:

附:我冒昧地根据你的口味改变了一些你可以改变的实现。

-(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]; 
} 
相关问题