我想知道如何检查两个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语句相互相等。
如何确保此方法有效?
答案 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;
}