我有一个问题。
简要说明:放置在CGRectIntersectsRect(object1.frame, object2.frame)
中的UIViewController
对于在不同类(Class1和Class2)中创建的object1和object2不起作用。我只能更改object1.center.x
和object1.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);
}**
答案 0 :(得分:0)
您的解释令人困惑且难以理解。
例如,这句话对我来说完全是个谜:
据我所知,它可能与协议/委托有关,但是我 没有找到足够的信息如何在我的情况下。
团?咦?矩形不是对象。委托是对象的设计模式。这有什么关系? (答案:很可能它根本不相关。)
继续前进,这里有几点需要考虑:
2次观看'如果帧都是同一视图的子视图,则它们将仅使用相同的坐标系。你的平台也是如此,你的" kelvin"查看同一视图的子视图(看起来您直接将平台添加到视图控制器的内容视图中,您的"开尔文"视图也是视图控制器内容视图的子视图?)
此外,您还可以参考object1.frame.size.width = 0
CGRectIntersectsRect函数检查2个矩形的任何像素是否重叠。如果你的任何一个矩形的高度或宽度为0,它就是空的,并且不能与任何东西相交。
答案 1 :(得分:0)
在initWithFrame
中,您使用UIImageView
Platform
向frame
添加Platform
子视图。那是不对的。例如,如果您在PlatForm
添加CGRectMake(10, 10, 100, 100)
,那么您将在CGRectMake(10, 10, 100, 100)
Platform
内CGRectMake(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}}更改为无法扩展到适合的内容,你不必担心图像在其范围内流血。