UI day 3 UIApplication应用程序的执行顺序 自定义视图 视图控制器


                                UIApplication应用程序执行的顺序
1.UIApplication应用程序类,一个应用程序只需要一个UIApplication对象,因为一个工程只能制作一个应用程序
: did didFinishLaunchingWithOptions:应用程序正在进行加载的时候调用此方法,此方法的主要作用,创建window对象,并将window设置主窗口且使其可见;所有当你在应用程程序上显示其他内容要把它添加到此方法中  FinishLaunchingWithOptions:

#pragma mark   1.应用程序开始加载的状态
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]autorelease];
打印程序方法的执行过程
__FUNCTION__执行的方法名
__LINE__ 显示的是 NSLog 方法在哪一行
    NSLog(@"%s%d",__FUNCTION__,__LINE__);
    self.window.backgroundColor = [UIColor whiteColor];
    [
self.window makeKeyAndVisible];
   
return YES;
}
2. #pragma mark   2应用程序已经处于活跃状态,应用程序已经在屏幕上运行了
重启应用程序中没开启的任务或者程序进入后台时被暂停的任务,如果应用程序之前在后台,也可以刷新一下用户界面
- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

3. #pragma mark   3 应用程序将要取消活跃状态,触发的因素(来电话,来短信,退出应用程序,手动进入后台)
//可以使用此方法暂停正在运行的任务,或者是让定时器暂停,或者暂停游戏
- (
void)applicationWillResignActive:(UIApplication *)application {
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

4. #pragma mark  4程序已经进入后台了,
用这个方法可以用来释放共享的资源,存储用户信息,是定时器无效,存储用户当前状态下的信息,以备下次恢复
如果你的应用程序支持后台运行,当用户退出的时候,这个方法将替代 applicationWillTerminate
- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

5. #pragma mark  5.应用程序即将进入前台
唤醒进入后台时的任务
- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

6.main函数的作用 UIApplicationMain ()此函数的三大功能:
(1)创建应用程序对象,每一个应用程序都是一个应用程序对象
(2)创建事件死循环(runloop,死循环),用于及时处理用户的操作,时时刻刻检测屏幕上有没有用户交互事件,一旦用户进行交互,可以立刻对用户的操作做出响应
(3)设置应用程序的代理对象,用来监测应用程序的运行状态

AppDelegate class获取一个类;
[A class]如果类 A调用class方法,则返回类A

 return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

                                        自定义视图

 1.数据源:
label上的数据源
NSArray *texts = @[@"用户名",@"  ",@"确认密码",@"  ",@"  "];

2.textField上的数据源
 NSArray *placeholds = @[@"请输入用户名",@"请输入密码",@"请输入确认密码",@"请输入手机号",@"请输入邮箱"];

3.我们自己定义的控件叫做自定义复合视图,因为系统没有为我们提供需要的控件
for (int i = 0; i < 5; i++) {
       
LTView *view = [[LTView alloc]initWithFrame:kCGRectMake_6];
       
//label赋值
        view.
label.text = texts[i];
       
//fleld赋值
        view.
field.placeholder = placeholds[i];
       
//设置代理
        view.
field.delegate = self;
       
//View设置tag
        view.
tag = 200 + i;
//        view.backgroundColor = [UIColor redColor];
        [contentview
addSubview:view];
        [view release];
@property(nonatomic,retain)UILabel *label;
@property ( nonatomic , retain ) UITextField *field;

4.释放掉对象属性
- (void)dealloc
{
   
self.label = nil;
   
self.field = nil;
    [
super dealloc];
}

5.重写父类的初始化方法
-(instancetype)initWithFrame:(CGRect)frame
{
   
if (self = [super initWithFrame:frame]) {
    [
self p_setup];
       
    }
   
return self;
   
}

6.封装成一个方法
-(void)p_setup{
   
       
_label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width/2, self.frame.size.height)];
//        _label.backgroundColor = [UIColor blueColor];
        [
self addSubview:_label];
        [
_label release];
       
       
       
_field = [[UITextField alloc]initWithFrame:CGRectMake(self.frame.size.width/2, 0, self.frame.size.width/2, self.frame.size.height)];
//        _field.backgroundColor = [UIColor redColor];
        [
self addSubview:_field];
        [
_field release];
   
}

7. -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
   
   
//获取父类视图
   
UIView *contenView = [self.window viewWithTag:300];
   
for (int i = 0; i < 5; i++) {
       
//此时contentView上的控件是我们自定义出来的LTView,所以根据tag取出控件应该强制转换为LTView
       
LTView *view = (LTView *)[contenView viewWithTag:200 + i];
        [view.
field resignFirstResponder];
    }



}
                                       UIViewController 视图控制器

1.UIViewController继承自UIResponder,是一个专门管理视图的一个类,只能用来管理单视图控制器
2.概念误区:视图控制器不是一个视图,是用来管理视图的,而且视图控制器自带了一个管理视图的一个根视图

3.UIViewController主要作用:
(1)管理视图
(2)响应事件
(3)分担Appdelegate的工作
(4)实现MVC模式

4. #pragma mark  视图控制器写在这并没有减轻AppDelegate的工作,
UIViewController *viewController = [[ UIViewController alloc ] init ];
   
   
//ViewController指定为根视图控制器
   
self.window.rootViewController = viewController;
        [viewController
release];
   
//访问试图控制器自带的View,View的大小和window的大小一样大
    viewController.
view.backgroundColor = [UIColor greenColor];
   
UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    redView.
backgroundColor = [UIColor redColor];
    [viewController.
view  addSubview:redView];
    [redView release];

5.  //创建自定义视图控制器对象
    RootViewController *rootVC = [[RootViewController alloc]init];
   
//rootVC指定为window的根视图控制器
   
self.window.rootViewController = rootVC;
   
    //释放rootVC
    [rootVC release];
   

6. //加载根视图的时候触发此方法
//如果要是重写loadview方法,第一种必须实现[super loadView]
//第二种方法:自定义一个视图,赋值给视图控制器自身所带的视图
-(
void)loadView{
    [
super loadView];//父类对该方法的实现是加载一个UIView对象,试图控制器自身所带的View就是由此方法创建出来的
   
   
//自定义试图控制器自身所带的视图View
//    UIView *newView = [[UIView alloc]initWithFrame:[UIScreen  mainScreen].bounds];
//    self.view = newView;
//    [newView release];
   
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
   
}

7. 当发现自身所带的Viewnil,会在去调用loadView,直到发现View不在为nil就不在调用loadView方法
//当视图控制器自带的View加载完成时触发
- (
void)viewDidLoad {
    [
super viewDidLoad];
   
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
   
//使用self.View访问自定义视图所带的View
   
self.view.backgroundColor = [UIColor greenColor];
   
//想添加的视图且在这个方法中
   
   
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    view.
backgroundColor = [UIColor redColor];
    [
self.view addSubview:view];
    [view release];


8. //当内存出现警告的时候自动调用此方法
//在这个方法中需要释放掉暂时不使用的资源
- (
void)didReceiveMemoryWarning {
    [
super didReceiveMemoryWarning];
   
NSLog(@"警告了 警告了,你TMD的警告了");
   
   
//[self isViewLoaded]用来判断视图控制器自带的View是否已经加载
   
//self.view.window查看根视图有没有在window上显示
   
if ([self isViewLoaded] && ! self.view.window) {
       
       
//安全的将视图删除
       
self.view = nil;
   
    }
   
// Dispose of any resources that can be recreated.
}


9. //当设备发生旋转时,当前界面不发生变化,就意味着不支持选择
-(
BOOL)shouldAutorotate
{
   
return YES;
}

//设置界面支持的旋转方向
-(
NSUInteger)supportedInterfaceOrientations{
   
   
return  UIInterfaceOrientationMaskAll;
   
}



10.//当旋转屏幕的时候触发,ios8之后才有效
-(
void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
  
   
//size是将要旋转到的屏幕的尺寸
   
NSLog(@"%@",NSStringFromCGSize(size));
   
/*
    if (size.width < size.height) {
        //
把竖屏状态坐标赋值给控件
    }else{
        //
把横屏状态坐标赋值给控件
    }
     */

}


//视图控制器的指定初始化方法,就是你无论调用哪个方法初始化一个视图控制器对象,都会走的哪个方法就叫做指定初始化方法
- (
instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
   
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
       
NSLog(@"%s,%d",__FUNCTION__,__LINE__);
    }
   
return self;
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值