【iOS】UI学习(一)

UILabel

UILabel是一种可以显示在屏幕上,显示文字的一种UI。
下面使用代码来演示UILabel的功能

@implementation ViewController

- (void)createUI
{
    UILabel* label = [[UILabel alloc] init];
    //显示的文字
    label.text = @"燕子,没有你我怎么活啊";
    //label显示的位置
    label.frame = CGRectMake(10, 300, 350, 200);
    //label的背景颜色
    label.backgroundColor = [UIColor greenColor];
    //整个屏幕的背景颜色
    self.view.backgroundColor = [UIColor redColor];
    //将label显示在屏幕上
    [self.view addSubview:label];
    //label中文字的大小,标准大小34
    label.font = [UIFont systemFontOfSize:34];
    //label中文字阴影的颜色
    label.shadowColor = [UIColor grayColor];
    //阴影的偏移位置
    label.shadowOffset = CGSizeMake(3, 0);
    //label中文字显示的行数,当等于0时,系统自行判断显示多少行合适
    label.numberOfLines = 0;
    //label中文字的颜色
    label.textColor = [UIColor whiteColor];
    //默认文字在label中靠左显示,这里将文字改为在label中间显示
    label.textAlignment = NSTextAlignmentCenter;
    
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self createUI];
}

@end

CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height):返回了一个结构体CGRect,GRect结构在屏幕上定义了一个矩形,它包含和大小。
它是用来定义一个矩形的,CGFloat x是对应屏幕的横向(x坐标), CGFloat y对应就是纵向(y坐标)。这里注意一点,描点是从屏幕的左上方开始的。
NSTextAlignmentLeft/Center/Right :文字靠左、居中、靠右。

效果图
在这里插入图片描述

UIButton

@implementation ViewController

-(void) createUIRectButton
{
    UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(20, 300, 300, 50);
    btn.backgroundColor = [UIColor greenColor];
    //向按钮普通状态添加文字
    [btn setTitle:@"按钮01" forState:UIControlStateNormal];
    //向按钮高亮状态提供文字
    [btn setTitle:@"按钮01已按下" forState:UIControlStateHighlighted];
    //设置按钮文字普通状态的颜色
    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    //设置按钮高亮状态文字的颜色
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
    //设置文字的字体大小
    btn.titleLabel.font = [UIFont systemFontOfSize:24];
    //下面又定义了一个按钮
    UIButton* btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn2.frame = CGRectMake(50, 150, 300, 50);
    btn2.backgroundColor = [UIColor brownColor];
    [btn2 setTitle:@"按钮02" forState:UIControlStateNormal];
    [btn2 setTitle:@"按钮02已按下" forState:UIControlStateHighlighted];
    [btn2 setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [btn2 setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
    btn2.titleLabel.font = [UIFont systemFontOfSize:24];
    btn.tag = 123;btn2.tag = 321;
    //UIButton事件
    [btn addTarget:self action:@selector(action01:) forControlEvents:UIControlEventTouchUpInside];
    [btn2 addTarget:self action:@selector(action01:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    [self.view addSubview:btn2]
}

-(void)action01:(UIButton*) btn
{
    if(btn.tag == 123){
        NSLog(@"玛卡巴卡");
    } else if(btn.tag == 321){
        NSLog(@"汤姆布利波");
    }
}

-(void)creatBtn
{
    UIButton* btnp = [UIButton buttonWithType:UIButtonTypeCustom];
    //UIButton* btno1 = [UIButton buttonWithType:UIButtonTypeCustom];
    btnp.frame = CGRectMake(20, 400, 400, 400);
    //加载两张图片,imageNamed后是图片名,要加图片类型
    UIImage* ima1 = [UIImage imageNamed:@"im1.jpg"];
    UIImage* ima2 = [UIImage imageNamed:@"im2.jpg"];
    //为图片按钮设置当状态不同呈现的图片
    [btnp setImage:ima1 forState:UIControlStateNormal];
    [btnp setImage:ima2 forState:UIControlStateHighlighted];
    [self.view addSubview:btnp];
    //UIButton事件
    [btn addTarget:self action:@selector(action01:) forControlEvents:UIControlEventTouchUpInside];
    
}

-(void) action02
{
    NSLog(@"Don't fukin touch it");
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self createUIRectButton];
    [self creatBtn];
}


@end

效果图
在这里插入图片描述

UIButton事件结果:
在这里插入图片描述

UIButton事件

  • addTarget:selfaction:@selector(action02)forControlEvents:UIControlEventTouchUpInside]:向按钮添加事件的函数,当函数满足第三处要求时,执行第二处的方法。
  • UIControlEventTouchUplnside:当目标在控件内部结束触摸屏幕并松开时(在按钮范围内),会触发该事件。
  • UIControlEventTouchUpOutside:当目标在控件内部结束触摸屏幕并松开时(在按钮范围外结束),会触发该事件。
  • UIControlEventTouchDown:当目标在控件内部开始触摸屏幕(按钮)时,触发该事件。
  • 可以一个事件控制几个按钮,例如程序中的玛卡巴卡和汤姆布利波,这里为了区分两个按钮,使用btn.tag区分两个按钮,也可以一个按钮触发多个事件。

UIView

UIView

  • 是iOS的视图对象
  • 是所有显示在屏幕上的基础类。
  • 所有显示在屏幕上的对象,都继承于UIView
  • UIView有背景颜色,矩形对象,有层级关系

示例程序

@implementation ViewController

-(void) create
{
    //创建一个UIView对象
    UIView* view = [[UIView alloc] init];
    view.frame = CGRectMake(80, 200, 100, 100);
    view.backgroundColor = [UIColor redColor];
    //将视图做为父视图的子视图管理起来
    [self.view addSubview:view];
    //view1.backgroundColor = [UIColor greenColor];
    //[self.view addSubview:view1];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self create];
}


@end

效果图
在这里插入图片描述

UIView对象的隐藏

    view.hidden = NO;//YES即为隐藏视图,NO反之
    view1.alpha = .5;//透明度,1为完全不透明,0为完全透明
    view.opaque = NO;//设置是否显示不透明
   [view1 removeFromSuperview];//

上面是四种隐藏UIView对象的方法:

  • hidden:YES时即为隐藏视图,NO反之(默认为NO)。
  • alpha: 设置透明度,1为完全不透明,0为完全透明,半透明时会显示父类对象的底色。
  • removeSuperview:将自己从父类视图的管理中删除掉,也就不会显示在屏幕上

UIView的层级关系

示范程序

@implementation ViewController

-(void) create
{
    UIView* view = [[UIView alloc] init];
    view.frame = CGRectMake(100, 100, 100, 100);
    view.backgroundColor = [UIColor redColor];
    UIView* view1 = [[UIView alloc] init];
    view1.frame = CGRectMake(125, 125, 100, 100);
    view1.backgroundColor = [UIColor greenColor];
    UIView* view2 = [[UIView alloc] init];
    view2.frame = CGRectMake(150, 150, 100, 100);
    view2.backgroundColor = [UIColor blueColor];
    //谁先被添加谁先绘制
    [self.view addSubview:view];
    [self.view addSubview:view1];
    [self.view addSubview:view2];
    //将某一个视图调整到最前面来
    [self.view bringSubviewToFront:view];
    //把某一个调整到最后
    [self.view sendSubviewToBack:view];
    //subviews是管理self.view的子视图的数组
    UIView* viewfront = self.view.subviews[2];
    UIView* viewback = self.view.subviews[0];
    if(viewfront == view2) {
        NSLog(@"相等");
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self create];
}
  • 当层级重叠时,谁先被添加就先绘制谁
  • bringSubviewToFront:把某个层级移动最上层。
  • sendSubviewToBack把某个层级移到最下层。
  • subviews管理self.view的子视图的数组。

运行结果在这里插入图片描述
在这里插入图片描述

UIWindow

注意:
老版本UIWindow的代码是写在“AppDelegate.m”中的。但是现在都不在这里写了,现在写到SceneDelegate.m里面,而且UIWindow对象不需要你手动创建了。

一个UIWindow对象为应用程序的用户界面提供了背景以及重要的事件处理行为。
UIWindow继承自UIView,每一个view,想要出现在屏幕上都依赖于window,但是程序中的window之间是相互独立的。应用程序收到事件之后会先转发给适当的window对象,从而又将事件转发给view对象。

具体来说,UIWindow有以下几个主要功能:

  • 视图层次结构视图:
    UIWindow是应用程序的层次结构视图,其整体视图是附属于UIWindow子视图。
    当应用程序启动时,系统会自动创建一个UIWindow实例并将其设置为应用程序的主窗口。
  • 接收和分发事件:
    UIWindow负责接收来自用户的输入事件,例如触摸事件、按键事件等。
    UIWindow会根据视图层次结构将这些事件分配给合适的视图进行处理。
  • 管理视图控制器:
    UIWindow可以持有一个根基健全的模型,特别是一个UIViewController实例。
  • 多窗口支持:
    特定特殊场景下,例如iPad的分屏,应用程序可以创建多个UIWindow实例。
    每个UIWindow都有自己的视点层次结构,相互独立。
  • 状态栏管理:
    UIWindow负责管理应用程序的状态栏,例如电池电量、网络信号等图标的显示。

示例代码

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    //创建一个视图跟踪器作为UIWindow的根视控制器
    self.window.rootViewController = [[UIViewController alloc] init];
    //设置window的颜色
    self.window.backgroundColor = [UIColor blueColor];
    //将window有效的显示在屏幕上
    [self.window makeKeyAndVisible];
    //直接给UIWindow上添加视图
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(100, 200, 50, 50)];
    view.backgroundColor = [UIColor greenColor];
    UIView* backview = [[UIView alloc] initWithFrame:CGRectMake(50, 200, 300, 300)];
    backview.backgroundColor = [UIColor redColor];
    [self.window addSubview:backview];
    //子视图的坐标会随着父视图的坐标改变而改变
    [backview addSubview:view];
    //打印不同对象的window属性,可以看出他们是同一个window
    NSLog(@"%@", view.window);
    NSLog(@"%@", backview.window);
    NSLog(@"%@", self.window);
}

打印结果
在这里插入图片描述
效果图
在这里插入图片描述

UIViewController

UIViewController是一个视图控制器,在整个UIKit中只有一个根视图控制器,属于window的属性。视图控制器用来管理界面和处理界面的逻辑类对象,程序启动前必须对根视图控制器赋值。

先新建一个View02类

#import "View02.h"

@interface View02 ()

@end

@implementation View02

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //给视图控制器设置背景颜色
    self.view.backgroundColor = [UIColor greenColor];
}


- (void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    //使当前的控制器消失掉,传入两个参数
    //第一个参数指是否有动画效果
    //第二个参数指结束后是否调用block块操作,不需要为nil
    [self dismissViewControllerAnimated: YES completion: nil];
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end

#import "ViewController.h"
#import "View02.h"

@interface ViewController ()

@end

@implementation ViewController

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //创建视图控制器二
    View02* vc= [[View02 alloc] init];
    //显示一个新的视图控制器界面到屏幕上来
    //第一个参数:新的视图控制器
    //第二个参数:是否是用动画切换效果
    //第三个参数:切换后是否使用block块,不使用为nil
    [self presentViewController:vc animated:YES completion:nil];
}


//当视图控制器第一次被加载视图时,调用此函数。
//当布局初始化视图来使用。
- (void)viewDidLoad {
    //默认情况下调用父类的加载视图函数
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIView* view = [[UIView alloc] init];
    view.backgroundColor = [UIColor greenColor];
    view.frame = CGRectMake(100, 100, 100, 200);
    self.view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];
}
//视图即将显示,调用此函数
//参数:表示是否用动画切换后消失
//当前的状态:视图还没有显示
-(void) viewWillAppear:(BOOL)animated
{
    NSLog(@"即将显示");
}

//视图即将消失,调用此函数
//参数:表示是否用动画切换后消失
//当前的状态:视图还是在屏幕上
-(void) viewWillDisappear:(BOOL)animated
{
    NSLog(@"即将消失");
}

-(void) viewDidAppear:(BOOL)animated
{
    NSLog(@"已经显示");
}

-(void) viewDidDisappear:(BOOL)animated
{
    NSLog(@"已经消失");
}

@end

效果图
在这里插入图片描述

点击后效果图
在这里插入图片描述

定时器与视图对象

定时器对象

  • 可以在每个固定时间发送一个消息
  • 通过此函数可在固定时间段来完成一个根据时间间隔的任务
  • 通过此消息来调用相应的时间函数

接口部分

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    //定义一个定时器对象
    //可以在每个固定时间发送一个消息
    //通过此消息来调用相应的时间函数
    //通过此函数可在固定时间段来完成一个根据时间间隔的任务
    NSTimer* _timerView;
}

@property (retain, nonatomic) NSTimer* timerView;
@end

实现部分

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
//属性和成员变量的同步
@synthesize timerView = _timerView;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //启动定时器按钮
    UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    
    btn.frame = CGRectMake(100, 100, 80, 40);
    
    [btn setTitle:@"启动定时器" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(pressStart) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    //停止定时器按钮
    UIButton* btnstop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnstop.frame = CGRectMake(100, 200, 80, 40);
    [btnstop setTitle:@"停止定时器" forState:UIControlStateNormal];
    [btnstop addTarget:self action:@selector(pressStop) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnstop];
    
    UIView* view = [[UIView alloc] init];
    view.backgroundColor = [UIColor greenColor];
    view.frame = CGRectMake(0, 0, 80, 80);
    [self.view addSubview:view];
    //设置view的标签值
    //通过父亲视图对象以及view的标签值可以获得相应的视图对象
    view.tag = 111;
    
}
-(void) pressStart
{
    //NSTtimer类方法创建一个定时器并且启动这个定时器
    //P1:每隔多久调用定时器函数,以秒数为单位的整数(调用第三个参数)
    //P2:表示实现定时器函数的对象指针
    //P3:定时器函数对象
    //P4:可以传入定时器函数中一个参数,无参数可以传nil
    //P5:定时器是否重复操作;YES为重复;NO为只完成一次函数调用
    //返回值为一个新建好的定时器对象
    _timerView = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateTimer:) userInfo:@"美羊羊" repeats:YES];
    
}

//定时器函数
//可以将定时器本身做为参数传入
-(void) updateTimer:(NSTimer*) timer
{
    
    NSLog(@"开始啦,%@", timer.userInfo);
    UIView* view = [self.view viewWithTag:111];
    
    view.frame = CGRectMake(view.frame.origin.x + 1, view.frame.origin.y + 1, 80, 80);
}

-(void) pressStop
{
    if(_timerView != nil) {
        [_timerView invalidate];
    }
    //[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(stop) userInfo:nil repeats:NO];
    //NSLog(@"停止啦");
}

-(void) stop
{
    NSLog(@"停止啦");
}

@end

效果图
在这里插入图片描述

UISwitch

  • UISwitch是一个开关控件,有开、关两种状态可以切换,是定义在UIKit库中的一个控件
  • 苹果官方的控件都定义在UIKit框架中,且UIKit框架中的所有控件都以UI开头
@interface ViewController : UIViewController {
    //定义一个开关控件
    //可以进行状态的改变
    //开:关:两种状态可以进行切换
    //所有UIKit框架库中的控件均以UI开头
    //苹果官方的控件都定义在UIKit框架中
    UISwitch* _myswitch;
}

@property (retain, nonatomic) UISwitch* myswitch;

@end

@implementation ViewController
//同步属性和成员变量
@synthesize myswitch = _myswitch;
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //创建一个开关对象
    //继承与UIView
    _myswitch = [[UISwitch alloc] init];
    //苹果官方的控件的位置设置
    //位置X,Y的值可以改变,宽度和高度无法改变
    _myswitch.frame = CGRectMake(100, 200, 80, 40);
    //_myswitch.backgroundColor = [UIColor blueColor];
    //开关状态设置属性
    //YES:开启状态;NO:关闭状态
    _myswitch.on = YES;
    //也可以使用set函数
    //[_myswitch setOn:YES];
    //设置开关状态
    //P1:状态设置
    //P2:是否开启动画效果
    [_myswitch setOn:YES animated:YES];
    [self.view addSubview:_myswitch];
    //设置开启状态的风格颜色
    [_myswitch setOnTintColor:[UIColor redColor] ];
    //改变开关按钮的颜色
    [_myswitch setThumbTintColor:[UIColor blueColor]];
    //设置整体风格颜色
    //[_myswitch setTintColor:[UIColor purpleColor]];
    //向开关控件添加事件函数
    //每次改变的时候都会调用swChange函数
    [_myswitch addTarget:self action:@selector(swChange:) forControlEvents:UIControlEventValueChanged];
    //self.view.backgroundColor = [UIColor blueColor];
}

-(void) swChange:(UISwitch*) sw
{
    if(sw.on == YES)
        NSLog(@"开关被打开");
    else
        NSLog(@"开关被关上");
}

@end

效果图
在这里插入图片描述
在这里插入图片描述

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值