我有Windows客户端开发,语言c ++和Flash ActionScript3开发方面的经验,但我是iOS开发人员的初学者......
要使它真正详细,这篇文章可能有点太长了......
我的Xcode ver是4.2.1
我创建了一个iOS应用程序(空应用程序),只有(MyAppDelegate.h)和(MyAppDelegate.m),如果我编译并运行它,将会显示一个白板,仅此而已,我们都知道。
现在,我想绘制一张图片,或简单的矩形或屏幕上的任何内容,我不想使用故事板,所以我创建了一个新的Objective-C类:MyView,它继承自UIView。并覆盖函数 - (void)drawRect:(CGRect)rect
然后我在MyAppDelegate.m的didFinishLaunchingWithOptions函数中写了这样的东西:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
self.window.rootViewController.view = [[MyView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window.rootViewController.view drawRect:[[UIScreen mainScreen] bounds]];
return YES;
}
所以你看,我做的是分配一个新的MyView实例并将其分配给self.window.rootViewController.view,然后调用drawRect函数。 但是当我在MyView的drawRect函数和调试中放置一个断点时,它并没有就此停止,这意味着应用程序永远不会去那里,我真的无法弄清楚原因。
我阅读了有关View和ViewController的文档,但他们没有告诉这个问题,希望你能帮助我!请告诉我我应该阅读什么来了解更多关于这个主题的信息
答案 0 :(得分:4)
首先关闭 NEVER 直接调用drawRect,系统会调用它。其次在你的例子中你没有视图控制器,所以实际上rootViewController是nil,因此没有什么工作。
您应该创建一个视图控制器来管理您的视图,或者直接将UIView子类直接添加到窗口中......
[self.window addSubview:myView];
注意:你应该使用UIViewController为你管理这个!
如果你是objective-c的新手,那么我将从一个UIView项目而不是一个空项目开始,看看一切如何挂起。
答案 1 :(得分:0)
如果您是新手并想要使用Quartz(2D api)进行实验,最好使用单一视图应用程序模板创建一个新项目,编辑xib以将视图的类更改为您的子类并实现drawRect:in你的视图子类,应该是全部。