使用NSTimer检查UIImageView数组帧是否相等

时间:2013-07-21 09:43:59

标签: objective-c cocoa-touch uiimageview nsarray nstimer

我想知道如何检查两个UIImageView NSMutableArray的所有帧是否彼此相等。现在我正在使用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语句相互相等。

如何确保此方法有效?

1 个答案:

答案 0 :(得分:1)

该块被同步调用,这意味着每次使用equal = YES时将调用if语句。

尝试使用常规枚举:

- (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;
}