【发布时间】:2013-07-21 16:22:06
【问题描述】:
我有两层。底层由隐藏的UIImageViews 组成,上层由可见的UIImageViews 组成。当底层UIImageViews的所有帧都等于上层UIImageViews的帧时,你必须在NSLog中看到。
问题是NSTimer 调用的布尔方法总是立即返回true,所以我看到NSLog。我只想在所有对应的帧彼此相等时看到NSLog。
这是我的代码:
- (void)checkTheFrames {
BOOL allEquals = [self isEqualFrames];
if (allEquals) {
NSLog(@"ALL THE FRAMES ARE EQUAL");
[AllPosCorrectTimer invalidate];
}
}
-(BOOL)isEqualFrames {
for(int i = 0; i < arrayImg.count; i++ ){
UIImageView *ImageView1 = arrayImg[i];
UIImageView *ImageView2 = HiddenFieldView[i];
if (!CGRectEqualToRect(ImageView1.frame, ImageView2.frame)) {
return NO;
}
}
return YES;
}
有没有办法解决这个问题?
【问题讨论】:
-
您应该记录帧以确保您在 isEqualFrames 方法中获得了您认为应该得到的结果。
-
我做到了,所有帧都必须相等。
-
那么当它们不应该相等时,你有记录它们吗?
-
我为什么要这样做?
-
你的日志应该是:NSLog(@"%f %f - %f %f", ImageView1.frame.origin.x, ImageView1.frame.origin.y, ImageView2.frame.origin. x, ImageView2.frame.origin.y);它应该放在 isEqualFrames 中的 if (!CGRectEqualToRect(ImageView1.frame, ImageView2.frame)) 之前。这就是您遇到问题的地方,因此您应该在此处记录日志,并且应该使用您在比较中使用的实际指针来完成。请这样做,并报告结果。
标签: ios objective-c cocoa-touch uiimageview frame