iOS开发基础-UI学习

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发基础-UI学习相关的知识,希望对你有一定的参考价值。

UIView

UIView表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为ios中几乎所有可视化控件都是UIView的子类。负责渲染区域的内容,并且响应该区域内发生的触摸事件。

UIView的功能

  • 管理矩形区域里的内容。
  • 处理矩形区域中的事件。
  • 子视图的管理。
  • 能实现动画,UIView的子类也具有这些功能。

通过addSubview:这个方法添加子类,不管谁添加它,只要越晚添加,视图就在越上层。
移除父视图也会把它得子视图移除。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //创建一个UIView对象
    //UIView是iOS中的视图对象
    //显示在屏幕上的所有的对象的基础类
    //所有显示在屏幕上的对象一定都继承于UIView
    //屏幕上能看到的对象都是UIView的子类
    //UIView是一个矩形对象,有背景颜色,可以显示,有层级关系
    UIView* view = [[UIView alloc] init];
    
    //设置UIView位置
    //x向右,y向下
    view.frame = CGRectMake(100, 100, 100, 200);
    
    view.backgroundColor = [UIColor blueColor];
    
    //将新建的视图添加到父亲视图上
    //1.将新建视图显示到屏幕上
    //2.将视图作为父亲视图的子视图管理起来
    [self.view addSubview: view];
    
    //是否隐藏视图对象
    //YES:不显示
    //NO:显示,默认为NO
    view.hidden = NO;
    
    //设置透明度
    //aplha等于1,不透明,等于0,透明,0.5,半透明
    //view.alpha = 0.5;
    
    self.view.backgroundColor = [UIColor orangeColor];
    
    //设置是否显示不透明
    //YES:不透明,NO:透明
    //默认为YES
    //它决定不了当前UIView是否透明
    //作用是:给绘图系统提供一个性能优化开关
    //如果该值为YES,那么绘图在绘制该视图时把整个视图当作不透明对待
    view.opaque = NO;
    
    //将自己从父亲视图删除掉
    //1:从父亲视图的管理中删除
    //2:不会显示在屏幕上
    //[view removeFromSuperview];
}
@end
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //创建三个视图对象
    UIView* view01 = [[UIView alloc] init];
    view01.frame = CGRectMake(100, 100, 150, 150);
    view01.backgroundColor = [UIColor blueColor];
    
    UIView* view02 = [[UIView alloc] init];
    view02.frame = CGRectMake(125, 125, 150, 150);
    view02.backgroundColor = [UIColor orangeColor];
    
    UIView* view03 = [[UIView alloc] init];
    view03.frame = CGRectMake(150, 150, 150, 150);
    view03.backgroundColor = [UIColor greenColor];
    
    //将三个视图对象显示到屏幕上
    //并且添加到父亲视图上
    //哪一个视图被先添先添加到视图中,就先绘制哪一个视图
    //按添加顺序绘制
    [self.view addSubview: view01];
    [self.view addSubview: view02];
    [self.view addSubview: view03];
    
    //将某一个视图调整到最前面
    //参数:UIView对象,调整哪一个视图到最前方
    [self.view bringSubviewToFront:view01];
    
    //将某一个视图调整到最后方
    [self.view sendSubviewToBack: view03];
    
    //subViews:管理所有self.view的子视图的数组
    //可以通过它直接找到子视图
    UIView* viewFront = self.view.subviews[2];
    
    UIView* viewBack = self.view.subviews[0];
    
    if (viewBack == view03) {
        NSLog(@"相等");
    }
    
    [view01 removeFromSuperview];
    
}
@end

UIWindow

UIWindow是UIview的子类,所以UIWindow就是一个View,就是增加许多系统的能力,只不过使用的时候,一般把它当容器用。UIWindow有个属性是rootViewController来跟UIViewController相连,然后以他为附着体,来进行真正的显示。

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    
    
    //创建一个UIWindow对象
    //整个程序中只有一个UIWindow对象
    //在程序基本上表示屏幕窗口
    //UIWindow继承于UIView
    //UIWindow是一个特殊的UIView
    //UIScreen:表示屏幕硬件表示类
    //mainScreen获得主屏幕设备信息
    //bounds表示屏幕的宽高值
    //self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    //创建一个视图控制器做为UIWindow的跟视图控制器
    self.window.rootViewController = [[UIViewController alloc] init];
    
    //设置背景颜色
    self.window.backgroundColor = [UIColor blueColor];
    
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 150)];
    view.backgroundColor = [UIColor orangeColor];
    //背景视图
    UIView* backView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 240, 360)];
    backView.backgroundColor = [UIColor greenColor];
    
    //将backView做为view的父亲视图
    //子视图的坐标是参照父亲视图的坐标系移动
    //父视图坐标移动,所有的子视图都会移动
    [backView addSubview: view];
    
    [self.window addSubview: view];
    
    //每一个view都有一个window属性
    //view.window;
    //backView.window;
    
    
    //使window有效并显示到屏幕上
    [self.window makeKeyAndVisible];
    
    NSLog(@"%@",view.window);
    NSLog(@"%@",backView.window);
    NSLog(@"%@",self.window);
    //self.window.rootViewController.window
    //它们是一个window
}

UIButton

UIButton的事件状态:

UIControlEventTouchDown,        //单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候
UIControlEventTouchDownRepeat,  //多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候
UIControlEventTouchDragInside,  //当一次触摸在控件窗口内拖动时
UIControlEventTouchDragOutside, //当一次触摸在控件窗口之外拖动时
UIControlEventTouchDragEnter,   //当一次触摸从控件窗口之外拖动到内部时
UIControlEventTouchDragExit,    //当一次触摸从控件窗口内部拖动到外部时
UIControlEventTouchUpInside,    //所有在控件之内触摸抬起事件
UIControlEventTouchUpOutside,   //所有在控件之外触摸抬起事件
UIControlEventTouchCancel,      //所有触摸取消事件
 
UIControlEventValueChanged,     //当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。
 
UIControlEventEditingDidBegin,      // 当文本控件中开始编辑时发送通知
UIControlEventEditingChanged,       // 当文本控件中的文本被改变时发送通知
UIControlEventEditingDidEnd,        // 当文本控件中编辑结束时发送通知
UIControlEventEditingDidEndOnExit,  // 当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知
 
UIControlEventAllTouchEvents,       // 通知所有触摸事件
UIControlEventAllEditingEvents,     // 通知所有关于文本编辑的事件
UIControlEventApplicationReserved,  // range available for application use
UIControlEventSystemReserved,       // range reserved for internal framework use
 
UIControlEventAllEvents,            // 通知所有事件

UIButton的状态:

  1. normal(普通状态)
  • 默认情况(Default)
  • 对应的枚举常量:UIControlStateNormal
  • 除开UIControlStateHighlighted、UIControlStateDisabled、UIControlStateSelected以外的其他情况,都是normal状态
  • 这种状态下的按钮可以接收点击事件 如果前后连着设置按钮同时处于多种状态, 则表现出来的也是 normal 状态, 如果设置为enabled = NO; 则会进入UIControlStateDisabled状态(包括颜色), 不能点击。
  1. highlighted(高亮状态)
  • 对应的枚举常量:UIControlStateHighlighted
  • 【当按住按钮不松开】或者【highlighted = YES】时就能达到这种状态
  • 这种状态下的按钮【可以】接收点击事件
  1. selected (选中状态)
  • 对应的枚举常量: UIControlStateSelected
  • 【button.selected = YES】时就能达到这种状态
  • 这种状态下的按钮【可以】接收点击事件
  1. disabled(失效状态,不可用状态)
  • 如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
  • 对应的枚举常量:UIControlStateDisabled
  • 【button.enabled = NO】时就能达到这种状态
  • 这种状态下的按钮【无法】接收点击事件
  1. 让按钮无法点击的2种方法
  • button.enabled = NO;
  • 【会】进入UIControlStateDisabled状态
    button.userInteractionEnabled = NO;
  • 【不会】进入UIControlStateDisabled状态,继续保持当前状态
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
//创建普通按钮函数
-(void) creatUIRectButton {
    //创建一个btn对象
    //圆角类型btn:UIButtonTypeRoundedRect
    //一定通过类方法来创建buttonWithType:类名+方法名
    UIButton* btn = [UIButton buttonWithType: UIButtonTypeRoundedRect];
    
    //设置button按钮的位置
    btn.frame = CGRectMake(100, 100, 100, 40);
    
    //设置按钮的文字内容
    //@parameter
    //P1:字符串类型,显示到按钮上的文字
    //P2:设置文字显示的状态类型:UIControlStateNormal 正常状态
    [btn setTitle:@"按钮01" forState: UIControlStateNormal];
    
    //P1:显示文字
    //P2:显示文字状态:UIControlStateHighlighted 按下状态
    [btn setTitle:@"按钮按下" forState: UIControlStateHighlighted];
    
    //灰色背景颜色
    btn.backgroundColor = [UIColor grayColor];
    
    //设置文字显示的颜色
    //P1:颜色
    //P2:状态
    //[btn setTitleColor:[UIColor redColor] forState: UIControlStateNormal];
    //设置按下状态的颜色
    [btn setTitleColor:[UIColor orangeColor] forState: UIControlStateHighlighted];
    
    //设置按钮风格颜色,不分状态,优先级没有setTitleColor高
    [btn setTintColor:[UIColor whiteColor]];
    
    //titleLable实际是UILable空间
    btn.titleLabel.font = [UIFont systemFontOfSize: 18];
    
    //添加到视图中并显示
    [self.view addSubview: btn];
}

//创建一个可以显示图片的按钮
-(void) creatImageBtn {
    //创建一个自定义类型的btn
    UIButton* btnImage = [UIButton buttonWithType:UIButtonTypeCustom];
    
    btnImage.frame = CGRectMake(100, 200, 100, 100);
    //两张图片加载
    UIImage* icon01 = [UIImage imageNamed:@"btn01.png"];
    UIImage* icon02 = [UIImage imageNamed:@"btn02.png"];
    
    //设置按钮图片方法设置
    //P1:显示的图片对象
    //P2:控件的状态
    [btnImage setImage:icon01 forState:UIControlStateNormal];
    
    [btnImage setImage:icon02 forState:UIControlStateHighlighted];
    
    [self.view addSubview: btnImage];
    
}

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

@end

以上是关于iOS开发基础-UI学习的主要内容,如果未能解决你的问题,请参考以下文章

masonry 学习笔记 一(基础尝试)

iOS开发系列-UI基础-KVC

iOS 相当于 Android 片段/布局

ios开发熟悉公司代码需要多久

IOS开发-UI学习-使用代码创建button

iOS UI入门