【问题标题】:Cannot determine when UIImageView frames are equal无法确定 UIImageView 帧何时相等
【发布时间】: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


【解决方案1】:

我认为问题在于你也在比较 Xs 和 Ys...也许你应该进一步去frame.size 比较它们。或者可以轻松比较宽度和高度(frame1.size.width == frame2.size.width)

如果这没有解决问题,请告诉我!

【讨论】:

  • 尺寸是框架的一部分。我不明白你的意思
  • @Steven 抱歉,您以为您只是想检查大小的相等性...所以您还需要比较位置吗?当您第一次触发该方法时,它们是否相互重叠?
  • UIImageViews 的位置是相邻的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2015-03-18
  • 2011-02-27
  • 2013-12-31
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多