【iOS】UI学习(一)

UI学习(一)

  • UILabel
  • UIButton
    • UIButton事件
  • UIView
    • UIView对象的隐藏
    • UIView的层级关系
  • UIWindow
  • UIViewController
    • 定时器与视图对象
  • UISwitch

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659471.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI联想扩图解决方案,智能联想,无需人工干预

对于众多企业而言&#xff0c;无论是广告宣传、产品展示还是客户体验&#xff0c;高质量、宽广视野的图像都是不可或缺的。受限于车载摄像头等设备的物理限制&#xff0c;我们往往难以捕捉到完整、宽广的视觉场景。针对这一挑战&#xff0c;美摄科技凭借其前沿的AI联想扩图解决…

H2RSVLM:引领遥感视觉语言模型的革命

随着人工智能技术的飞速发展&#xff0c;遥感图像理解在环境监测、气候变化、粮食安全和灾害预警等多个领域扮演着越来越重要的角色。然而&#xff0c;现有的通用视觉语言模型&#xff08;VLMs&#xff09;在处理遥感图像时仍面临挑战&#xff0c;主要因为遥感图像的独特性和当…

15.Redis之持久化

0.知识引入 mysql的事务,有四个比较核心的特性. 1. 原子性 2.一致性 3.持久性 >(和持久化说的是一回事)【把数据存储在硬盘 >持久把数据存储茌内存上>不持久~】【重启进程/重启主机 之后,数据是否存在!!】 4.隔离性~ Redis 是一个 内存 数据库.把数据存储在内存中的…

【数据结构和算法】-动态规划爬楼梯

动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;主要用于解决包含重叠子问题和最优子结构性质的问题。它的核心思想是将一个复杂的问题分解为若干个子问题&#xff0c;并保存子问题的解&#xff0c;以便在需要时直接利用&am…

万亿应急国债项目之通信指挥类应急装备多链路聚合通信设备在应急行业中的重要作用

万亿应急国债项目的推出&#xff0c;无疑是我国在应急领域的一次重大举措。在这一宏大蓝图中&#xff0c;通信指挥类应急装备的多链路聚合通信设备显得尤为重要&#xff0c;其在应急行业中所发挥的作用&#xff0c;堪称不可或缺的关键一环。 通信指挥是应急响应中的核心环节&a…

登峰造极,北斗相伴——纪念人类首次登顶珠穆朗玛峰71周年

71年前的今天&#xff0c;1953年5月29日11时30分&#xff0c;人类实现了一个伟大的壮举&#xff1a;首次登上了珠穆朗玛峰&#xff0c;这座海拔8848.86米的世界最高峰。这是一次充满了艰辛、勇气和智慧的探险&#xff0c;也是一次改变了人类历史和文化的探险。 自那以后&#…

[FlareOn6]Overlong

很简单的逻辑 一度让我以为是加保护了 运行告诉我从未编码,懵逼 动调你也发现,你根本没什么可以操作的空间,密文什么的,都是固定的 但是这里大家发现没 我们只加密了28个密文 然后text是128 也就是 0x80 是不是因为密文没加密完呢 我也懒得去写代码了 汇编直接修改push 字…

windows使用gzip和bzip2对文件进行压缩

git软件 git bash&#xff1a;下载地址https://git-scm.com/downloads&#xff0c;安装时一路next。 这个软件是给程序员提交代码用的工具&#xff0c;内置linux系统的命令行&#xff0c;可以使用linux系统特有的压缩软件gzip和bzip2. gzip使用 gzip一般用于压缩tar包&#…

【ubuntu20】--- 定时同步文件

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Linux命令】--- 多核压缩命令大全&…

一行命令将已克隆的本地Git仓库推送到内网服务器

一、需求背景 我们公司用gitea搭建了一个git服务器&#xff0c;其中支持win7的最高版本是v1.20.6。 我们公司的电脑在任何时候都不能连接外网&#xff0c;但是希望将一些开源的仓库移植到内网的服务器来。一是有相关代码使用的需求&#xff0c;二是可以建设一个内网能够查阅的…

TokenInsight: Covalent SDK、网络及数据可用性解决方案评估报告

摘要 Covalent 是一个区块链长期数据可用性解决方案&#xff0c;提供结构化的链上数据 API&#xff0c;允许开发者访问超过 225 个区块链的全面结构化链上数据。TokenInsight 根据标准化评级方法&#xff0c;从六个维度对 Covalent 进行了评估。 技术和安全 Covalent 自 201…

视觉语音识别挑战赛 CNVSRC 2024

CNVSRC 2024由NCMMSC 2024组委会发起&#xff0c;清华大学、北京邮电大学、海天瑞声、语音之家共同主办。竞赛的目标是通过口唇动作来推断发音内容&#xff0c;进一步推动视觉语音识别技术的发展。视觉语音识别&#xff08;也称为读唇技术&#xff09;是一种通过观察唇部动作推…

Linux下Git的基本使用

认识Git 先基于Windows下的git操作&#xff0c;熟悉了git的基本概念和使用&#xff0c;直接参考这几篇文章&#xff1a; Git概述、安装与本地仓库的基本操作-CSDN博客 Git本地仓库与远程仓库的交互-CSDN博客 GtiHub远程仓库之间的交互-CSDN博客 Git仓库的分支操作-CSDN博客 仓库…

深入分析 Android Activity (二)

文章目录 深入分析 Android Activity (二)1. Activity 的启动模式&#xff08;Launch Modes&#xff09;1.1 标准模式&#xff08;standard&#xff09;1.2 单顶模式&#xff08;singleTop&#xff09;1.3 单任务模式&#xff08;singleTask&#xff09;1.4 单实例模式&#xf…

关于验证码的那些漏洞

一、短信轰炸 这类漏洞存在的原因是没有对短信验证码的发送时间、用户及其IP作一些限制。 案例1、正常的短信轰炸 burp一直发包即可 案例2、并发绕过 做了限制咋办&#xff1f;可以试试并发(万物皆可并发) 使用turbo intruder插件进行并发。 并发次数越大是不是轰炸就越多。 …

有1,2,3,4这四个数字,能组成多少个互不相同且无重复数字的三个数?分别是什么?

有1,2,3,4这四个数字&#xff0c;能组成多少个互不相同且无重复数字的三个数&#xff1f;分别是什么&#xff1f; 提示&#xff1a;123&#xff0c;321就是符合要求&#xff0c;数字既不相同&#xff0c;而且每个数字的个十百位也不重复&#xff1b;而121,212就不行&#xff0c…

spdlog 使用

spdlog 是一个日志库&#xff0c;直接引用头文件即可使用&#xff0c;速度快&#xff0c;异步打印日志。 对应的git地址 spdloggit地址 对应的目录 把上面划线的文件夹引入到自己的工程中&#xff0c;即可使用spdlog 下面是使用例子 inline static void create_logging(const…

redis-cli help使用

1. redis-cli命令使用—先连接上服务器 连接到 Redis 服务器&#xff1a; 使用 redis-cli 命令即可连接到本地运行的 Redis 服务器&#xff0c;默认连接到本地的 6379 端口。 redis-cli如果 Redis 服务器不在本地或者端口不同&#xff0c;可以使用 -h 和 -p 参数指定主机和端…

CCF CAT- 全国算法精英大赛(2024第二场)往届真题练习 4 | 珂学家

前言 餐馆 思路&#xff1a;可撤销的0-1背包 考察了多个知识点&#xff0c;包括 差分技巧离线思路0-1背包 不过这题卡语言&#xff0c;尤其卡python import java.io.*; import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream;public…

前端实习记录——git篇(公司拉取项目流程)

实习中第一步就是拉取项目&#xff0c;看项目代码&#xff0c;下面总结一下我在公司项目拉取项目流程。 1、联系leader开通gitlab账号 2、查看/配置git用户名和密码 &#xff08;1&#xff09;查看 git config user.name git config user.email git config user.password &…