Ios CGRectIntersectsRect与2个UIImageView不起作用
我有个问题 简而言之:Ios CGRectIntersectsRect与2个UIImageView不起作用,ios,objective-c,uiimageview,cgrect,Ios,Objective C,Uiimageview,Cgrect,我有个问题 简而言之:CGRectIntersectsRect(object1.frame,object2.frame)放置在UIViewController中,不适用于在不同类(Class1和Class2)中创建的object1和object2。我只能更改它们的坐标,如object1.center.x,以及object1.frame.size.width=0(我想这就是cgrectcrossion函数不起作用的原因)。这些物体只是互相穿过 据我所知,这可能与协议/授权有关,但我还没有找到任何足
CGRectIntersectsRect(object1.frame,object2.frame)
放置在UIViewController
中,不适用于在不同类(Class1和Class2)中创建的object1和object2。我只能更改它们的坐标,如object1.center.x
,以及object1.frame.size.width=0
(我想这就是cgrectcrossion
函数不起作用的原因)。这些物体只是互相穿过
据我所知,这可能与协议/授权有关,但我还没有找到任何足够的信息来说明我的处境
Platform.m(用于在ViewController中创建平台的我的类)
ViewController.m(在@界面中有Platform*Platform;Kelvin*Kelvin;)
你的解释令人困惑,难以理解 例如,这句话对我来说完全是个谜: 据我所知,这可能与协议/授权有关,但我 我还没有找到足够的信息来说明我的处境 代表团?嗯?矩形不是对象。委托是对象的一种设计模式。这在这里有什么关系?(答:很可能根本不相关。) 不过,接下来要考虑以下几点: 只有当两个视图的框架都是同一视图的子视图时,它们才会使用相同的坐标系。您的平台和“开尔文”视图子视图是否为同一视图(看起来您将平台直接添加到视图控制器的内容视图,您的“开尔文”视图是否也是视图控制器的内容视图的子视图?) 此外,还可以参考
object1.frame.size.width=0
CGRectIntersectsRect函数检查两个矩形中是否有任何像素重叠。如果任一矩形的高度或宽度为0,则该矩形为空,并且不能与任何东西相交。在
initWithFrame
中,您正在使用平台的框架向平台添加UIImageView
子视图。这是不正确的。例如,如果您在CGRectMake(10,10,100,100)
中添加PlatForm
,那么您将在CGRectMake(10,10,100,100)
中添加图像视图(即原始视图中的CGRectMake(20,20,100,100)
)
因此,我认为您应该创建一个从0,0
开始的CGRect
(或者使用平台的边界,而不是它的框架
):
顺便说一句,为了安全起见,您可能还希望将clipstobunds
设置为YES
,这样,如果您将contentMode
更改为不适合缩放的内容,您就不必担心图像溢出边界。谢谢!这是我的错误,这两个对象,“平台”和“开尔文”是同一视图的子视图,但不是直接的,我在这里使用x和y坐标通过CGRectMake(0,0,frame.size.WITH,frame.size.height)放置了“开尔文”,因此后来它们在相交时具有不同的坐标。现在,我将它们的初始坐标都更改为0,0,并且可以正常工作!=)顺便说一句,您不显示kelvin
的创建。它是与平台
相同视图的子视图吗?如果它们不是同一视图的子视图,则必须将框架转换为同一坐标系。
@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;
}
-(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);
}**
@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;
}