0

我想知道如何检查两个UIImageView NSMutableArrays 的所有帧是否彼此相等。现在我正在使用 a 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'布尔值的值都是真的,因为计时器,所以根据if语句,帧总是彼此相等。

如您所见,该函数中有一个布尔值。但是每次'equal'布尔值的值都是真的,因为计时器,所以根据if语句,帧总是彼此相等。

我怎样才能确保这种方法有效?

4

1 回答 1

1

该块被异步调用,这意味着该if语句将在每次等于=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;
}  
于 2013-07-21T10:13:02.173 回答