Objective-C创建ViewController的实例

时间:2014-03-21 10:01:00

标签: ios objective-c uiviewcontroller

我想用:

创建一个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语句,有人可以告诉我为什么吗?

5 个答案:

答案 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时,您应该使用@synthesizeViewController来访问变量和出口。

示例:

在.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];
}