2013-07-21 77 views
0

我想知道如何检查两个UIImageViewNSMutableArray s的所有帧是否彼此相等。现在我正在使用NSTimer检查UIImageView阵列帧与NSTimer相等

这里是我的方法使用的代码:

__block BOOL equal = YES; 
[Img1Array enumerateObjectsUsingBlock:^(UIImageView *ImageView1, NSUInteger idx, BOOL *stop) { 
    UIImageView *ImageView2 = Img2Array[idx]; 
    if (!CGRectEqualToRect(ImageView1.frame, ImageView2.frame)) { 
     *stop = YES; 
     equal = NO; 
    } 
}]; 

if (equal) { 
    NSLog(@"ALL THE FRAMES ARE EQUAL"); 
    [AllPosCorrectTimer invalidate]; 
} 

的方法中有一个布尔值,你可以看到。但是由于定时器每次'equal'布尔值的值都是true,所以根据if语句,帧总是彼此相等。

该函数有一个布尔值,如你所见。但是由于定时器每次'equal'布尔值的值都是true,所以根据if语句,帧总是彼此相等。

如何确保此方法可行?

回答

1

该块被称为一个同步,这意味着if语句将每次调用equal = YES。

尝试使用常规的枚举:

- (void)startTimer { 
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkTheFrames) userInfo:nil repeats:YES]; 
} 

- (void)checkTheFrames { 
    BOOL allEquals = [self isEqualFrames]; 
    if (allEquals) { 
     NSLog(@"ALL THE FRAMES ARE EQUAL"); 
     [self.timer invalidate]; 
    } 
} 

- (BOOL)isEqualFrames { 
    for(int i=0; i < Img1Array.count; i++){ 
     UIImageView *ImageView1 = Img1Array[i]; 
     UIImageView *ImageView2 = Img2Array[i]; 
     if (!CGRectEqualToRect(ImageView1.frame, ImageView2.frame)) { 
      return NO; // Stop enumerating 
     } 
    } 
    return YES; 
} 
+0

所以我必须把if语句块中的其它if语句下? – Steven

+0

因为这不起作用。当我移动一个'UIImageView'时,我多次获得'NSLog'。当两个'UIImageView'数组的所有帧都相等时,我想要一个'NSLog' – Steven

+0

在这种情况下,我不会使用块枚举,我只是使用常规的枚举。结帐我更新的答案。 – Eyal