我想用:
创建一个ViewController类的实例ViewController *viewConnection = [[ViewController alloc]init];
self.image.center = CGPointMake(self.image.center.x + 1, self.image.center.y);
if (CGRectIntersectsRect(self.image.frame, viewConnection.otherImage.frame)) {
[self.movementTimer invalidate];
}`
当类中的图像命中ViewController中的图像时,它不会进入if语句,有人可以告诉我为什么吗?
答案 0 :(得分:1)
尝试创建ViewController类的共享实例,如下所示:
+ (id)sharedInstance {
static ClassName * sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
// Do stuff
});
return sharedInstance;
}
答案 1 :(得分:0)
在初始化@property
时,您应该使用@synthesize
和ViewController
来访问变量和出口。
示例:
在.h文件中
@property (nonatomic, retain) IBOutlet UIView * testView;
在.m文件中
@synthesize testView;
谢谢!
答案 2 :(得分:0)
要访问变量和出口,您必须在.h文件中定义propreties:
@interface ViewController : UIViewController
//Property
@property (nonatomic, copy) NSString *myString;
//Outlet
@property (nonatomic, weak) IBOutlet UILabel *myLabel;
@end
之后,您可以创建对象并访问它的属性:
ViewController *viewConnection = [[ViewController alloc]init];
viewConnection.myString = @"string";
viewConnection.myLabel.text = @"label text";
//扩展
在您的示例中,您将创建viewConnection对象,然后检查其属性'frame:
viewConnection.otherImage.frame
但是你没有设置它,你没有设置otherImage,你没有设置它的框架所以这就是你遇到问题的原因。
//扩展2
它不起作用的原因是因为你试图改变属性的框架(otherImage),我假设它刚刚在你初始化视图控制器之后是IBOutlet但是IBOutlet是在视图控制器生命周期中创建的,你应该有机会viewDidLoad或viewDidAppeare中的出口,但在您呈现/推送视图控制器后触发此方法。所以你应该创建变量,比如CGRect,然后在初始化视图控制器之后设置它的值,之后推送/呈现视图控制器并在你的类(ViewController)中,例如,在viewDidLoad中设置otherImage.frame = variable。 / p>
答案 3 :(得分:0)
下面的方法检查两个帧是否相交。如果ViewControllers
的来源相同,这可以正常工作!
CGRectIntersectsRect(self.image.frame, viewConnection.otherImage.frame)
如果你的“viewConnection”的位置为100px top和100px,那么CGRectIntersectsRect
将无法知道这一点,并且可能只返回'false',尽管视图可能在视觉上重叠。这并不一定意味着帧相交。
那说你在测试交叉点时需要转换“otherImage”的矩形:
if( CGRectIntersectsRect([viewConnection.otherImage convertRect:viewConnection.otherImage toView:self.view] , self.image.frame) ){
NSLog(@"INTERSECTION");
}
答案 4 :(得分:0)
在创建UIViewController对象之后没有view
,它应该稍后加载,以便让你的代码工作调用[viewConnection view]
例如加载视图,然后再检查框架
ViewController *viewConnection = [[ViewController alloc]init];
[viewConnection view];
self.image.center = CGPointMake(self.image.center.x + 1, self.image.center.y);
if (CGRectIntersectsRect(self.image.frame, viewConnection.otherImage.frame)) {
[self.movementTimer invalidate];
}