2013-07-21 57 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