2014-03-13 27 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]; 
} 
相關問題