带有2个UIImageViews的CGRectIntersectsRect不起作用

时间:2014-05-29 13:28:13

标签: ios objective-c uiimageview cgrect

我有一个问题。

简要说明:放置在CGRectIntersectsRect(object1.frame, object2.frame)中的UIViewController对于在不同类(Class1和Class2)中创建的object1和object2不起作用。我只能更改object1.center.xobject1.frame.size.width = 0的坐标(我想这就是CGRectIntersection函数不起作用的原因)。这些对象刚刚相互通过。

据我了解,它可能与协议/委托有关,但我还没有找到足够的信息如何处理我的情况。

Platform.m (我在ViewController中创建平台的课程)

@implementation Platform

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        platformView = [[UIImageView alloc]initWithFrame:frame];
        platformView.image = [UIImage imageNamed:@"platform.png"];

        [self addSubview:platformView];

    }
    return self;
}

ViewController.m (在@interface中有Platform *平台; Kelvin * kelvin;)

-(void)addPlatform
   {
    platform = [[Platform alloc]initWithFrame:CGRectMake(initialPlatformX, (500 -    arc4random()%200), 200, 10)];
    [self.view addSubview:platform];
   }

    **if (!CGRectIntersectsRect(kelvin.frame, platform.frame)) {
        NSLog(@"%f", platform.frame.size.width);
    }**

2 个答案:

答案 0 :(得分:0)

您的解释令人困惑且难以理解。

例如,这句话对我来说完全是个谜:

  

据我所知,它可能与协议/委托有关,但是我   没有找到足够的信息如何在我的情况下。

团?咦?矩形不是对象。委托是对象的设计模式。这有什么关系? (答案:很可能它根本不相关。)

继续前进,这里有几点需要考虑:

2次观看'如果帧都是同一视图的子视图,则它们将仅使用相同的坐标系。你的平台也是如此,你的" kelvin"查看同一视图的子视图(看起来您直接将平台添加到视图控制器的内容视图中,您的"开尔文"视图也是视图控制器内容视图的子视图?)

此外,您还可以参考object1.frame.size.width = 0

CGRectIntersectsRect函数检查2个矩形的任何像素是否重叠。如果你的任何一个矩形的高度或宽度为0,它就是空的,并且不能与任何东西相交。

答案 1 :(得分:0)

initWithFrame中,您使用UIImageView Platformframe添加Platform子视图。那是不对的。例如,如果您在PlatForm添加CGRectMake(10, 10, 100, 100),那么您将在CGRectMake(10, 10, 100, 100) PlatformCGRectMake(20, 20, 100, 100)添加图片视图(CGRect视图)。

所以,相反,我认为你想要制作一个0, 0,从bounds开始(或使用Platform frame,而不是@implementation Platform - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { platformView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; platformView.image = [UIImage imageNamed:@"platform.png"]; [self addSubview:platformView]; } return self; } clipsToBounds ):

YES

顺便说一下,为了安全起见,您可能还想将contentMode设置为{{1}},这样如果您将{{1}}更改为无法扩展到适合的内容,你不必担心图像在其范围内流血。